python数字图像处理

这里博客是自己做的个系统整理,主要说的是python在数字图像处理方面的应用,主要用到的库有PIL和skimage

PIL库

1、用python简单处理图片:打开、显示、保存图像

from PIl import Image
img = Image.open('路径')
img.show()

from PIL import Image
import matplotlib.pyplot as plt 
img = Image.open('路径')
plt.figure('')
plt.axis('off')
plt.imshow(img)
plt.show()
print(img.size)     #图像的尺寸(width,height)
print(img.mode)     #图像的模式(RGB或其他)
print(img.format)   #图像的格式(png,jpg等)

img.save('路径')    #图像的保存

2、用python简单处理图片:图像通道、几何变换、裁剪

gray = img.convert('L')    #彩色图像转灰度图
plt.imshow(gray,cmap='gray')

r,g,b = img.split()      #通道分离
pic = Image.merge('RGB',(r,g,b))     #合并三通道

box = (left,upper,right,lower)
roi = img.crop(box)            #图像裁剪

几何变换:
resize(),rotate(),transpose()

3、用python简单处理图片:添加水印

4、用python简单处理图片:图像中像素的访问

from PIL import Image
import numpy as np 
import matplotlib.pyplot as plt 

img = np.array(Image.open('路径'))
print(img.shape)      #图像尺寸(行,列,通道数)(i,j,k)
print(img.dtype)      #图像类型(unit8等)
print(img.size)      #图像尺寸i*j*k
print(type(img))      #<class 'numpy.ndarray>

5、用python简单处理图片:图像直方图

#一维数组变二维数组用reshape(),二维数组变一维数组用flatten()
# 对图像求直方图,先把图像矩阵变为一维数组,然后在进行统计

img = np.array(Image.open('').convert('L'))
arr = img.flatten()
n,bins,patches = plt.hist(arr,bins=256,normed=1,facecolor='',alpha=)

bins:直方图的柱数
normed:是否将得到的直方图向量归一化,默认是0
facecolor:直方图颜色
alpha:透明度

返回值:
n:直方图向量,是否归一化由参数设定
bins:返回各个bin的区间范围
patches:返回bin里面包含的数据,是一个list

skimage库

scikit-image 是基于scipy的图像处理包,将图片作为numpy数组处理,读取的图像格式是(height,width,channel)

1、环境安装和配置

2、图像的读取、显示和保存

3、图像像素的访问与裁剪

4、图像数据类型及颜色空间转换

5、图像的绘制

6、图像的批量处理

7、图像的形变与缩放

8、对比度与亮度调整

9、直方图与均衡化

10、图像简单滤波

11、图像自动阈值分割

12、基本图形的绘制

13、基本形态学滤波

14、高级滤波

15、霍夫线变换

16、霍夫圆和椭圆变换

17、边缘和轮廓

18、高级形态学处理

19、骨架提取和分水岭算法

感谢原博主的贡献,自己在学习python的图像处理的时候主要按照这个教程来进行学习的,感觉非常有用。
这个主要是对python的skimage库进行的一些讲述,其实现在opencv库也有了python接口,但是自己还没有用过,之前大致看了下《opencv官方教程中文版for python》,发现其实大部分接口和skimage的很像,可能在调用方面存在些差异,具体opencv不是很了解。

猜你喜欢

转载自blog.csdn.net/yato0514/article/details/81489541