十六 openCV 教程 构造卷积核及morphology操作

        一、getStructuringElement()函数

        

        作用是返回一个结构元素(卷积核),具体解析如下:

        kernel = cv2.getStructuringElement(a,b,c):

         得到一个结构元素(卷积核)。主要用于后续的腐蚀、膨胀、开、闭等运算。
        因为这些运算都是依赖于卷积核的,不同的卷积核(形状、大小)对图形的腐蚀、膨胀操作效果不一样

         a设定卷积核的形状、b设定卷积核的大小、c表示描点的位置,一般 c = 1,表示描点位于中心。

a取不同的参数会导致卷积核有不同的形状,a参数有三个:

        ①:MORPH_RECT(函数返回矩形卷积核)

        ②:MORPH_CROSS(函数返回十字形卷积核)

        ③:MORPH_ELLIPSE(函数返回椭圆形卷积核)

        b:用一个Size(x,y)的形式表示,表示卷积核有x行,y列。

二、腐蚀操作 胖子变瘦 有黑周围变黑,有0都变0,白色变少

        ①:腐蚀操作的对象是二值化图像,二值图像前景物体为1,背景为0,卷积核也是只含有0和1。

         腐蚀的步骤就是用卷积核B的描点,来对齐A中的每一个小方格,然后选取卷积核B的方格中的数据的最小值,意思就是当B的描点对齐A的边界方格的时候,那么B的其他四个方格可能位于A图像中的0像素点,那么最小值就是0,那么就把卷积核B的描点对应的A中的小方格设为0,这就导致使用腐蚀操作后,我我们能看到的白色区域减少的原因。

Mat kernel = cv2.getStructuringElement(a,b,c)
erode(img, dest,kernel, iteration = 1)# 腐蚀操作


三、膨胀操作    瘦子变胖子 有白周围变白

        原理与腐蚀操作一样,是取最大像素值。

 Mat  getStructuringElement(a,b,c)
dilate(img,dst, kernel, iteration = 1)# 膨胀操作


四、开、闭

morphology英 [mɔːˈfɒlədʒɪ]   形态学

开:先进行腐蚀运算,再进行膨胀运算。

闭:先进行膨胀运算,再进行腐蚀运算。
getStructuringElement(kernel,a,b,c)
 morphologyEx(img, dest,MORPH_OPEN,kernel) # 开运算
 morphologyEx(ima,dest,MORPH_CLOSE,lernel) # 闭运算
开运算和闭运算都是处理噪点用的:

开:消去一个黑图中的很多小白点

闭:

         闭运算=膨胀 +腐蚀

五、形态学梯度

gradient [ˈɡreɪdɪənt] 斜坡路段;坡度;倾斜度;梯度;斜率;梯度;

原图-腐蚀后的图=图的边框

       //形态学梯度 原图-腐蚀后的图像= 图像轮廓
        morphologyEx(src, dst, MORPH_GRADIENT, kernel);

六、顶帽操作

        顶帽操作  原图-开运算=原图外噪声
         morphologyEx(src, dst, MORPH_TOPHAT,kernel);

七、黑帽操作

        黑帽操作  原图-闭运算=原图内噪声
         morphologyEx(src, dst, MORPH_BLACKHAT, kernel);

五、注意点

        1、 kernel 如果噪点比较多,会选择大一点的kernel,如果噪点比较小,可以选择小点的kernel

        2、腐蚀是有黑都变黑

        3、膨胀是有白都变白

        4、开运算先黑再白,可以去除图形外部的噪声,消去一个黑图中的很多小白点

        5、闭运算先白再黑,可以去除图形内部的噪声,消去一个白图中的很多小黑点

void myCV::morphologytest()
{
	Mat ds,dst, src = imread("font2.jpg");
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
	//腐蚀操作
	//erode(src, dst, kernel);
	//膨胀操作
	//dilate(src, dst, kernel);
	//开操作
	//morphologyEx(src, dst, MORPH_OPEN, kernel);
	//闭操作
	morphologyEx(src, dst, MORPH_CLOSE,kernel);
	morphologyEx(dst, dst, MORPH_OPEN, kernel);
	addmatcols(src, dst, ds); //自定义函数将两个mat合并在一起 
	imshow("morphology", ds);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值