腐蚀与膨胀的基本 *** 作

腐蚀与膨胀的基本 *** 作,第1张

腐蚀膨胀的基本 *** 作

通过腐蚀和膨胀可以对图像进行加工,腐蚀是指将图像中一些毛刺去除,使图像更柔和;膨胀是指将缺陷填满使图像更饱满。下面用一张二值图来举例说明。

 

可以看到,这个图形边缘有大量细线,中间的白色粗线条也有一些黑色瑕疵。 下面我们进行腐蚀 *** 作:

 

 

 可以看到细线消失了一部分。再看看膨胀:

 

 这回是粗实线中的小黑块被填充了。

看完了效果,我们再来看看代码,首先是腐蚀的代码:

#include#includeusing namespace std;using namespace cv;int main(){Mat img = imread("F:image1.png");Mat dst;inRange (img, Scalar(0, 0, 30), Scalar(180, 221, 255), dst);    //获取一张图片,将它二值化    Mat dst1;Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));    //创建结构元素大小为3 * 3,这个大小可理解为计算机在做修改时的笔触,数值越大改动越剧烈        erode(dst, dst1, element);    //进行腐蚀    namedWindow("腐蚀", 0);imshow("腐蚀", dst1);    waitKey(0);    return 0;}

然后是膨胀的代码:

#include#includeusing namespace std;using namespace cv;int main(){Mat img = imread("F:image1.png");Mat dst;inRange (img, Scalar(0, 0, 30), Scalar(180, 221, 255), dst);    //获取一张图片,将它二值化    Mat dst1;Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));    //创建结构元素大小为3 * 3,这个大小可理解为计算机在做修改时的笔触,数值越大改动越剧烈        dilate(dst, dst1, element);    //进行膨胀    namedWindow("膨胀", 0);imshow("膨胀", dst1);    waitKey(0);    return 0;}

有了腐蚀和膨胀的经验,我们自然会想到再做一次类似的 *** 作,例如腐蚀两次或先腐蚀再膨胀等,若要腐蚀两次,我们只需修改erode的参数为:

 erode(dst, dst1, element,Point(-1,-1), 2);

而此时输出的图像为

可以看到更多的毛刺被清除。

膨胀两次同理。

至于另外的 *** 作方式,我们来看看这张图:

 这么多的 *** 作,是不是意味着我们要记住很多代码呢?不用担心,前人已经帮助我们把这些的原理隐去,再使用时只需要输入各个 *** 作的代号即可(下图给出了各个代号)。比如我们用这种方法进行梯度计算:

#include#includeusing namespace std;using namespace cv;int main(){Mat img = imread("F:image1.png");Mat dst;inRange (img, Scalar(0, 0, 30), Scalar(180, 221, 255), dst);Mat dst1;Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));//创建结构元素大小为3 * 3morphologyEx(dst, dst1, 4, element);namedWindow("结果", 0);imshow("结果", dst1);waitKey(0);return 0;}

结果为:

 新人写东西不易,麻烦点个赞吧!

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713773.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存