一、图像的IO操作
1.读取图像
cv.imread(参数1,参数2)
参数1:要读取的图像路径
参数2:读取方式的标准
1:用彩色方式读取
0:用灰度模式读取
-1:包括alpha通道的图像加载模式
示例:
img = cv.imread("test01.jpg",1)
# 用彩色模式读取图片
2.显示图像
cv.imshow(参数1,参数2:)
参数1:显示窗口名
参数2:图像变量名
plt.imshow(img[:,:,::-1])
plt.show()
3.保存图像
cv.imwrite(参数1,参数2)
参数1:保存路径
参数2:图像变量名
二、在图像上绘制图形
0.创建空白图像
img = np.zeros((512,512,3),np.uint8)
1.直线
cv.line(参数1,(a1,a2),(b1,b2),参数2,参数3)
参数1:要绘制的图像变量名
a:直线起始坐标
b:直线终点坐标
参数2:颜色
参数3:宽度(像素大小)
2.圆形
cv.circle(参数1,(a1,a2),参数2,参数3,参数4)
参数1:要绘制的图像变量名
a:圆心坐标
参数2:半径
参数3:颜色
参数4:宽度(等于-1时为实心圆)
3.矩形
参数1:要绘制的图像变量名
a:左上角坐标
b:右下角坐标
参数2:颜色
参数3:宽度
cv.rectangle(参数1,(a1,a2),(b1,b2),参数2,参数3)
4.文字
参数1:要绘制的图像变量名
参数2:写入内容
a:位置
参数3:字体类型
参数4:大小
参数5:颜色
参数6:宽度
参数7:线型
cv.putText(参数1,参数2,(a1,a2),参数3,参数4,参数5,参数6,参数7)
三、图像基础操作的其他操作
获取图像中的像素值
例:
px = img[a,b]
返回值为三个元素的数组 (颜色用三个数的数组表示)
获取图像中的某种颜色强度
例:
blue = img[a,b,c]
# a,b,c为代表这个颜色的参数
修改某位置的像素值
img[a,b] = [c,d,e]
获取图像属性
形状:img.shage(行数,列数,通道数) 注:通道数为颜色数,彩色为3
图像大小:img.size
数据类型:img.dtype
通道的拆分与合并
拆分:
b,g,r = cv.split(img)
合并:
img = cv.merge((b,g,r))
色彩空间的转换
cv.cvtColor(参数1,参数2)
参数1:需要转换的图像变量名
参数2:转换方式
cv.COLOR_BGR2GRAY: BGR<=>Gray
cv.COLOR_BGR2HSV: BGR -> HSV
四、图像的算术操作
1.图像的加法
numpy加法:取模运算
OpenCV加法:饱和运算
当像素值溢出255时,例:250+10
OpenCV结果:255
numpy结果:4
OpenCV语法:
img1 = cv.add(图像a,图像b)
numpy语法:
img2 = 图像1 +图像2
2.图像的混合
加权加法
img = cv.addWeighted(图像1,权重1,图像2,权重2,常数)
五、图像的几何变换
1.图像缩放
cv.resize(src,dsize,fx = ,fy = ,interpoltion)
src:图像名,
dsizd:绝对尺寸
fx,fy:相对尺寸(比例缩放)
internpoltion:差值方法
2.图像平移
获取图像的行列数:
rows,cols =img.shape[:2]
平移矩阵:
大小2*3
M = np.float32.([1,0,100],[0,1,50])
dst = cv.warpAffine(img,M,(rowe,cols))
# 原图 平移矩阵 移动后图像大小
3.图像旋转
M = cv.getRotationMatrix20((rows/2,cols/2),90,1) # 旋转矩阵的获取
# 旋转中心, 旋转角度 缩放比例
def = cv.warAffine(img,M,(cols,rows))
4.仿射变换
缩放、平移、旋转的组合
使用仿射变换:
1.创建三个点
2.获取三个点原始图像位置坐标,和变换后图像坐标
pts1 = np.float32([,],[,],[,])
pts2 = np.float32([,],[,],[,])
M = cv.getAffineTransform(pts1,pts2)
dat = warpAffine(img,M,(cols,rows))
5.透射变换
pts1 = np.float32([,],[,],[,],[,])
pts2 = np.float32([,],[,],[,],[,])
M = cv.getPerspectiveTransform(pts1,pts2)
dat = warpPerspective(img,M,(cols,rows))
6.图像金字塔
不同分辨率的图片
down_img = cy.pyrDown(img) # 下采样 大
up_img = cy.pyrUp(img) # 上采样 小
六、形态学操作
1.连通性
邻域:
连通性满足条件
(1)两个像素点相邻
(2)两个像素点的灰度值满足相似性准则
4连通:两像素在4邻域内
8连通:两像素在8邻域内
m连通:关键在于无交集,即无公共4邻域像素
2.腐蚀和膨胀
复杂的概念,但实际结果就是找到所有能覆盖b结构的a结构中的点
取出高亮区域的方法
cv.erode(img,kernel,iterations)
原图 核结构 次数
与腐蚀相反,膨胀是找到无法让b结构完全覆盖的a结构中的点,让其覆盖上b结构
cv.dilate(img,kernel,iterations)
3.开运算、闭运算
(特点:不可逆)
开运算:先腐蚀,后膨胀
断连接,消除小的噪点
闭运算:先膨胀,后腐蚀
填充操作
cv.morphologyEx(img,op,kernel)
原图 运算方式 核结构
op:
开运算:cv.MORPH_OPEN
闭运算:cv.MORPH_CLESE
4.礼帽,黑帽
礼帽:原图和开运算后的差
黑帽:原图和闭运算后的差
cv.morphologyEx(img,op,kernel)
原图 运算方式 核结构
礼帽:cv.MORPH_TOPHAT
黑帽:cv.MORPH_BLACKHAT
七、噪声
1.椒盐噪声
随机黑白点
2.高斯噪声
灰度值服从正太分布