回顾,上节课你学到了什么?

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.连通性

 2.形态学操作

(1)腐蚀和膨胀

腐蚀

膨胀

(2)开运算和闭运算

 (3)礼帽和黑帽

礼帽(顶帽)

黑帽

 总结,这节课你学到了什么?


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)腐蚀和膨胀

腐蚀

形态学——腐蚀_仰望星空90226的博客-CSDN博客_形态学腐蚀1、基本概念腐蚀 是一种消除连通域的边界点,使边界向内收缩的处理。例如:注:图像画面上边框处不能被结构元素覆盖的部分可以保持原来的值不变,也可以置为背景。2、设计思想设计一个结构元素,结构元素的原点定位在待处理的目标像素上,通过判断是否覆盖,来确定是否该点被腐蚀掉。例如:3、算法步骤1)扫描原图,找到第一个像素值为1的目标点;2)将预先设定好形状以及原点...https://blog.csdn.net/ywxk1314/article/details/81391478

具体操作是:用一个卷积核(假设3x3矩阵)扫描图像中的每一个像素,用卷积核从第一个像素开始遍历,如果与结构像元吻合,中间像元则为1,否则为0。

腐蚀:

cv.erode(img,kernel,iterations)

kernel:卷积核 np.uint8(矩阵)

iterations:迭代次数

膨胀

形态学——膨胀_仰望星空90226的博客-CSDN博客_形态学膨胀1、基本概念膨胀是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理。例如:2、设计思想设计一个结构元素,结构元素的原点定位在背景像素上,判断是否覆盖有目标点,来确定是否该点被膨胀为目标点。例如:3、算法步骤1)扫描原图,找到第一个像素值为0的背景点;2)将预先设定好形状以及原点位置的结构元素的原点移到该点;3)判断该结构元素所覆盖的像素...https://blog.csdn.net/ywxk1314/article/details/81391800?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%BD%A2%E6%80%81%E5%AD%A6%E8%86%A8%E8%83%80&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-81391800.nonecase&spm=1018.2226.3001.4187

具体操作是:用一个卷积核(假设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)

开运算:先腐蚀后膨胀。去除边缘高亮毛细噪声,不影响原来的图像

闭运算:先膨胀后腐蚀。消除中间暗淡孔洞,不影响原来的图像

礼帽(顶帽):原图像与开运算图像之差,高亮显示噪声

黑帽:闭运算结果与原图之差,高亮显示暗淡孔洞

更多推荐