[图像识别]4.OpenCV的形态学操作
回顾,上节课你学到了什么?
res=cv.add(img1,img2)
res=img1+img2
cv.addWeighted(img1,p1,img2,p2,k)
cv.resize(img,dsize,fx,fy,interplation)
M=cv.getRotationMatrix2D(center,angle,scale)
M=cv.getAffineTransform(pts1,pts2)
M=getPerspectiveTransform(pts1,pts2)
cv.warpAffine(img,M,dsize)
cv.warpPerspective(img,M,(W,H))
img=cv.pyrUp(img)
img=cv.pyrDown(img)
目录
1.连通性
在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有3种: 4邻接N4(p)、D邻接ND(p)和8邻接N8(p)。分别如下图所示:

连通性是描述区域和边界的重要概念,两个像素连通的两个必要条件是: .
1.两个像素的位置是否相邻
2.两个像素的灰度值是否满足特定的相似性准则(或者 是否相等)
根据连通性的定义,有4联通、8联通和m联通三种。
4联通:对于具有值V的像素p和q,如果q在集合N4(p)中,则称这两个像素是4连通。
8联通:对于具有值V的像素p和q,如果q在集合N8(p)中, 则称这两个像素是8连通。

对于具有值V的像素p和q,如果:
1. q在集合N4(p)中,或
2. q在集合ND(p)中,并且N4(p)与N4(q)的交集为空(没有值V的像素)
则称这两个像素是m连通的,即4连通和D连通的混合连通。

2.形态学操作
形态学转换是基于图像形状的一些简单操作。它通常在二进制图像上执行。腐蚀和膨胀是两个基本的形态学运算符,都是针对白色部分(高亮)而言的。然后它的变体形式如开运算,闭运算,礼帽黑帽等。
(1)腐蚀和膨胀
腐蚀
具体操作是:用一个卷积核(假设3x3矩阵)扫描图像中的每一个像素,用卷积核从第一个像素开始遍历,如果与结构像元吻合,中间像元则为1,否则为0。
腐蚀:
cv.erode(img,kernel,iterations)
kernel:卷积核 np.uint8(矩阵)
iterations:迭代次数
膨胀
具体操作是:用一个卷积核(假设3x3矩阵)扫描图像中的每一个空像素,用卷积核从第一个像素开始遍历,如果存在重复的像元,中间像元则为1,否则为0。
膨胀
cv.dilate(img,kernel,iterations)
kernel:卷积核 np.uint8(矩阵)
iterations:迭代次数
举例
#3.1
import cv2 as cv import numpy as np pic1 = cv.imread("3.jpg") kernel=np.uint8([[0,1,0],[1,0,1],[0,1,0]]) res1=cv.erode(pic1,kernel,2) res2=cv.dilate(pic1,kernel,2) cv.imshow("img",pic1) cv.imshow("erode",res1) cv.imshow("dilate",res2) cv.waitKey(0)
结果

腐蚀变细,膨胀加粗
(2)开运算和闭运算
按照一定的次序进行腐蚀和膨胀
开运算:先腐蚀后膨胀。去除边缘高亮毛细噪声,不影响原来的图像
闭运算:先膨胀后腐蚀。消除中间暗淡孔洞,不影响原来的图像
cv.morphologyEx(img,op,kernel)
op:处理方式
cv.MORPH_OPEN开运算
cv.MORPH_CLOSE闭运算
kernel:卷积核
举例
#3.2
import cv2 as cv import numpy as np pic1 = cv.imread("3.jpg") kernel=np.uint8([[0,1,0],[1,0,1],[0,1,0]]) res1=cv.morphologyEx(pic1,0,kernel) res2=cv.morphologyEx(pic1,1,kernel) cv.imshow("img",pic1) cv.imshow("open",res1) cv.imshow("close",res2) cv.waitKey(0)
结果

(3)礼帽和黑帽
礼帽(顶帽)
原图像与开运算图像之差,高亮显示噪声
因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,
得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。
礼帽运算用来分离比邻近点亮一些的斑块。 当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。
黑帽
闭运算结果与原图之差,高亮显示暗淡孔洞
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关 。黑帽运算用来分离比邻近点暗-些的斑块。
cv.morphologyEx(img,op,kernel)
op:处理方式
![]()
kernel:卷积核
举例
#3.3
import cv2 as cv import numpy as np pic1 = cv.imread("3.jpg") kernel=np.uint8([[0,1,0],[1,0,1],[0,1,0]]) res1=cv.morphologyEx(pic1,cv.MORPH_TOPHAT ,kernel) res2=cv.morphologyEx(pic1,cv.MORPH_BLACKHAT,kernel) cv.imshow("img",pic1) cv.imshow("TOPHAT",res1) cv.imshow("BLACKHAT",res2) cv.waitKey(0)
结果:

总结,这节课你学到了什么?
常见的邻接关系有3种: 4邻接N4(p)、D邻接ND(p)和8邻接N8(p)
根据连通性的定义,有4联通、8联通和m联通三种。
cv.erode(img,kernel,iterations)
cv.dilate(img,kernel,iterations)
cv.morphologyEx(img,op,kernel)
开运算:先腐蚀后膨胀。去除边缘高亮毛细噪声,不影响原来的图像
闭运算:先膨胀后腐蚀。消除中间暗淡孔洞,不影响原来的图像
礼帽(顶帽):原图像与开运算图像之差,高亮显示噪声
黑帽:闭运算结果与原图之差,高亮显示暗淡孔洞
更多推荐
https://blog.csdn.net/ywxk1314/article/details/81391478
所有评论(0)