opencv学习-膨胀与腐蚀

Posted 殇堼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv学习-膨胀与腐蚀相关的知识,希望对你有一定的参考价值。

膨胀与腐蚀是图像处理中最常用的形态学操作手段,其中要涉及到一个主要的API,即生成卷积核的API。

1.核生成的API

getStructuringElement(int shape, Size ksize, Point anchor)
int shape - 形状 (MORPH_RECT \\MORPH_CROSS \\MORPH_ELLIPSE)
第一个参数主要有如下几种选择:

(1)MORPH_RECT:矩形结构区域。

(2)MORPH_CROSS,十字形结构区域。

(3)MORPH_ELLIPSE,椭圆结构区域,内接于矩形Rect(0,0,esize.width,0.esize.height)的填充椭圆。

Size ksize- 卷积核的大小
Point anchor - 锚点 默认是Point(-1, -1)意思就是中心像素
例如:
getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

2.膨胀

原理:将卷积核内的像素最大值代替区域内锚点的值,所谓锚点,就是区域的中心点。
锚点 默认是Point(-1, -1)意思就是中心像素

2.1膨胀API

dilate(src, dst, kernel);

2.2代码展示

#include<opencv2\\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	Mat src, dst;
	src = imread("D:/images/box1.png");
	if (src.empty())
	{
		cout << "could not load image !";
		return -1;
	}
	
	imshow("原图", src);
	Mat kernel;
	kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));//设计一个卷积核
	dilate(src, dst, kernel);//膨胀API
	imshow("膨胀后", dst);

	waitKey(0);
	return 0;
}

膨胀后,由于像素值变大后导致白斑区域扩大
在这里插入图片描述

3.腐蚀

原理:将卷积核内的像素最小值代替区域内锚点的值,因此腐蚀跟膨胀刚好效果是相反的。
通过腐蚀,图像黑色的区域变胖了。

3.1腐蚀API

erode(src, dst, kernel);

3.2代码展示

#include<opencv2\\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	Mat src, dst;
	src = imread("D:/images/box1.png");
	if (src.empty())
	{
		cout << "could not load image !";
		return -1;
	}
	
	imshow("原图", src);
	Mat kernel;
	kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));//设计一个卷积核
	erode(src, dst, kernel);//腐蚀API
	imshow("膨胀后", dst);

	waitKey(0);
	return 0;
}

膨胀后,由于像素值变小后导致白斑区域缩小。
在这里插入图片描述

以上是关于opencv学习-膨胀与腐蚀的主要内容,如果未能解决你的问题,请参考以下文章

学习 opencv---形态学图像处理:膨胀和腐蚀

Python图像处理丨图像腐蚀与图像膨胀

图像的膨胀与腐蚀——OpenCV与C++的具体实现

OpenCV图像处理篇之腐蚀与膨胀

Python图像处理丨图像腐蚀与图像膨胀

opencv —— erodedilate 腐蚀与膨胀