第二次培训笔记
OpenCV基础操作分为两部分,一部分是图像的基本操作,另一部分是算数的基本操作。
•图像的基本操作
一、读取图像(cv.imread())
cv.color:彩色图像 cv..imread*GRAYSCALE:灰色图像 cv.imread_UNCHANGE:包括alpha通道的加载图像模式
默认参数是彩色图像
简写:用1、0、-1代替三个标志
Img = cv.imread(‘messi5.jpg,0)
二、显示图像(cv.imshow())
显示图像的窗口名称,用字符串类型表示。
#在调用显示图像的API后,要调用cv.waitKey()给图像绘制留下时间,否则窗口会出现无响应的情况,并且图像无法显示出来。
- 在opencv中显示
Cv.inshow(‘image’,img)
Cv.waitKey(0)
- 在matplotlib中显示(引用matplotlib库)
plt.imshow(img[:,:,:;-1])
plt.show()
- 保存图像(Cv.imwrite())
Cv.imwrite(‘messigray.jng,imp)
保存的名称及格式
- 总结
通过加载灰度图像,显示图像,如果按's'并退出则保存图像,或者按ESC键直接退出而不保存。
- 绘制几何图形
- 绘制直线(cv.line(img,start,end,color,thickness))
img:要绘制直线的图像 Start,end: 直线的起点和终点
color: 线条的颜色 Thickness: 线条宽度
- 绘制圆形(cv.circle(img,centerpoint, r, color, thickness))
注意:Thickness为-1时,生成闭合图案并填充颜色。
- 绘制矩形(cv.rectangle(img,leftupper,rightdown,color,thickness))
- 向图像中添加文字
cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)
img:图像 text:要写入的文本数据 station:文本的放置位置
font:字体 Fontsize :字体大小
- 获取图像的属性
形状:img.shape 图像大小:img.size 数据类型:img.dtype
- 图像通道的拆分与合并
①通道拆分
b,g,r = cv.split(img)
②通道合并
img = cv.merge((b,g,r))
- 色彩空间的改变
最广泛应用的是BGR → Gray和BGR→HSV。
•算数操作
一、图像的加法
可以使用OpenCV的cv.add()函数把两幅图像相加,或者可以简单地通过numpy操作添加两个图像,如res = img1 + img2。两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值。
注意:OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,而Numpy添加是模运算。
- 图像的混合
g(x)=(1−α)f0(x)+αf1(x)
通过修改α的值(0→1),可以实现混合。
图像缩放:对图像进行放大或缩小
cv.resize()
图像平移:
指定平移矩阵后,调用cv.warpAffine()平移图像
图像旋转:
调用cv.getRotationMatrix2D获取旋转矩阵,然后调用cv.warpAffine()进行旋转
仿射变换:
调用cv.getAffineTransform将创建变换矩阵,最后该矩阵将传递给cv.warpAffine()进行变换
透射变换:
通过函数cv.getPerspectiveTransform()找到变换矩阵,将cv.warpPerspective()进行投射变换
金字塔
图像金字塔是图像多尺度表达的一种,使用的API:
cv.pyrUp(): 向上采样
cv.pyrDown(): 向下采样
连通性 邻接关系:4邻接,8邻接和D邻接
连通性:4连通,8连通和m连通
形态学操作
腐蚀和膨胀:
腐蚀:求局部最大值
膨胀:求局部最小值
开闭运算:
开:先腐蚀后膨胀
闭:先膨胀后腐蚀
礼帽和黑帽:
礼帽:原图像与开运算之差
黑帽:闭运算与原图像之差