- 图片处理
- 读入图像 ret=cv2.imread(文件名,[显示控制参数])
=>显示控制参数:0代表显示灰度图像,1代表显示彩色图像
imread读取图片的颜色顺序是B->G->R。
2. 显示图像 ret=cv2.imshow(“窗口名”,图像名)
=>cv2.imshow(“demo”, image)
3. 删除所有窗口
=>cv2.destroyAllWindows()
4. 保存图像 ret=cv2.imwrite(文件地址,文件名)
=>cv2.imwrite(“D:\\demo.jpg”,img)
- 像素处理
- 读取像素
返回值=图像(位置参数)
print(i[100,100])
- 修改像素
print(i[100,100]) #当前像素信息
i[100,100]=255
print(i[100,100]) #修改过后的像素信息
=>灰度图像:a=img[88,125] 彩色图像:a=img[88,125,0]
3. 利用numpy像素处理
Import numpy as np
print(i.item(100,100)) #读像素
i.itemset((100,100),255) #修改像素
- 获取图像属性
- 形状 shape
灰度:返回行数,列数
彩色:返回行数,列数,通道数
=>print(img.shape)
2. 像素数目 size
灰度:行*列
彩色:行*列*通道
=>print(img.size)
3. 图像类型 dtype
=>print(img.dtype)
- 图像ROI
face=a[220:400,250:350]
a[0:180,0:100]=face #将感兴趣的区域复制到左上角
- 图像加法 add 结果图像=图1+图2
Result=cv2.add(a,b)
- 图像融合 addWeighted 结果图像=图1*系数1+图2*系数2+亮度调节值
dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)
- 图像类型转换
#GRAY(灰度图)
gray=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY) #彩色图转灰度图
#HSV(色度,饱和度,纯度)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #彩色图转HSV
- 图像翻转 flip
dst=cv2.flip(src,flipCode)
flipCode<0 以x轴,y轴同时翻转
flipCode=0 以x轴为对称轴翻转
flipCode>0 以y轴为对称轴翻转
- 阈值分割
- 二进制阈值化
如果选定阈值127,则所有比127大的像素点都变成255,反之,则变成0。
- 反二进制阈值化
如果选定阈值127,则所有比127小的像素点都变成255,反之,则变成0。
- 截断阈值化
如果选定阈值127,则所有比127小的像素点保持不变,反之,则变成127。
- 阈值化
如果选定阈值127,则所有比127大的像素点保持不变,反之,则变成0。
- 反阈值化
如果选定阈值127,则所有比127小的像素点保持不变,反之,则变成0。
- 图像阈值 threshold及实现
ret,dst=cv2.threshold(src,thresh,maxval,type)
src:原图像 thresh:阈值 maxval:最大值 type:类型
类型(type):
1.二进制阈值化 cv2.THRESH_BINARY
2.反二进制阈值化 cv2.THRESH_BINARY_INV
3.截断阈值化 cv2.THRESH_TRUNC
4.阈值化 cv2.THRESH_TOZERO
5.反阈值化 cv2.THRESH_TOZERO_INV
十一、图像平滑——方框滤波 boxFilter函数
处理结果=cv2.boxFilter(原始图,目标图像深度,核大小,normalize属性)
目标图像深度:默认为-1
normalize属性:是否对目标图像进行归一化处理
normalize=0,则不进行归一化处理;normalize=1进行归一化处理,与均值滤波相同
=>result=cv2.boxFilter(demo,-1,(3,3),normalize=1)
十二、图像平滑——高斯滤波 GaussianBlur函数
处理结果=cv2. GaussianBlur(src,ksize,sigmaX)
src :原始图 ksize :核大小(N,N)必须是比1大的奇数 sigmaX :X方向方差,控制权重
=>result=cv2.GaussianBlur(0,(3,3),0)
十三、图像平滑——中值滤波 medianBlur函数
处理结果=cv2.medianBlur(src,ksize)
十四、形态学转换——图像腐蚀 erode 主要针对二值图像
处理结果=cv2.erode(src,kernel,iterations)
kernel:卷积核 iterations:迭代次数(粗细标准)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.erode(demo,k,iterations=10)
十五、形态学转换——图像膨胀 dilate
处理结果=cv2.dilate(src,kernel,iterations)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.dilate(demo,k)
注:图像被腐蚀后,去除了噪声,但是会压缩对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原有形状。
十六、形态学转换——开运算
处理结果=cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.morphologyEx (demo, cv2. MORPH_OPEN,k)
十七、形态学转换——闭运算
处理结果=cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.morphologyEx (demo, cv2. MORPH_CLOSE,k)
十八、形态学转换——梯度操作(膨胀图像-腐蚀图像)
处理结果=cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.morphologyEx(demo, cv2.MORPH_GRADIENT,k)
十九、形态学转换——图像顶帽(原始图像-开运算图像)
处理结果=cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.morphologyEx(demo, cv2.MORPH_TOPHAT,k)
二十、形态学转换——黑帽操作(闭运算图像-原始图像)
处理结果=cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
=>k=np.ones((5,5),np.uint8)
=>result=cv2.morphologyEx(demo, cv2.MORPH_BLACKHAT,k)