【opencv】基本图像形态学操作

图像形态学的作用是简化图像数据,保持基本图像特性,取出不相干结构等。
目录:
1.erode()
2.dilate()
3.morphologyEx()//MORPH_OPEN
4.morphologyEx()//MORPH_CLOSE

1.erode()
腐蚀运算
作用:去除一些粘连像素,以及去除噪音
在这里插入图片描述

参数一: InputArray src: Mat类,通道数量不限,但深度应为CV_8U,CV_16U…
参数二:OutputArray dst: 输出图像,需要有和原图片一样的尺寸和类型
参数三:InputArray kernel: 腐蚀操作的内核,一般用3*3的核
参数四:Point anchor:锚的位置,默认用(-1,-1)
参数五:int iterations:使用函数的次数

2.dilate()
膨胀运算
作于:由于无法实现理想的二值化,使得原本被连通的像素集被分成不同的连通域,从而影响目标的提取,可以通过膨胀恢复连通性
【opencv】基本图像形态学操作_第1张图片

参数一:InputArray src: Mat类,通道数量不限,但深度应为CV_8U,CV_16U…
参数二:OutputArray dst: 输出图像,需要有和原图片一样的尺寸和类型
参数三: InputArray kernel: 腐蚀操作的内核,一般用3*3的核
参数四: Point anchor:锚的位置,默认用(-1,-1)
参数五:int iterations:使用函数的次数

由于单纯的腐蚀运算或膨胀运算仍旧不能达到预期的效果,还可以进行开运算或闭运算。
3.morphologyEx()//MORPH_OPEN
开运算
先对图像进行3×3腐蚀,再对图像进行3×3膨胀
【opencv】基本图像形态学操作_第2张图片

参数一:InputArray src: Mat类,通道数量不限,但深度应为CV_8U,CV_16U… .
参数二:OutputArray dst: 输出图像,需要有和原图片一样的尺寸和类型
参数三: int op:表示形态学运算的类型,如MORPH_OPEN、MORPH_CLOSE分别代表开运算和闭运算
参数四:InputArray kernel: 腐蚀操作的内核,一般用3*3的核
参数五:Point anchor:锚的位置,一般用(-1,-1)
参数六:int iterations:使用函数的次数

4.morphologyEx()//MORPH_CLOSE
闭运算
先对图像进行膨胀,再对膨胀结果进行腐蚀

参考代码如下:

#include
#include

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("D:\\photogallery\\其他\\硬币.png");
	Mat imgGray,imgThresh, imgErode, imgDil, imgOpen, imgClose;
	//转灰度二值化
	cvtColor(img, imgGray, COLOR_BGR2GRAY);
	threshold(imgGray, imgThresh, 100, 255, THRESH_OTSU);
	Mat element = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
	//腐蚀
	erode(imgThresh, imgErode, element, Point(-1, -1), 1);
	//膨胀
	dilate(imgThresh, imgDil, element, Point(-1, -1), 1);
	//开运算
	morphologyEx(imgThresh, imgOpen, MORPH_OPEN, element, Point(-1, -1), 1);
	//闭运算
	morphologyEx(imgThresh, imgClose, MORPH_CLOSE, element);

	imshow("img", img);
	imshow("imgGray", imgGray);
	imshow("imgThresh", imgThresh);
	imshow("imgErode", imgErode);
	imshow("imgDil", imgDil);
	imshow("imgOpen", imgOpen);
	imshow("imgClose", imgClose);
	waitKey(0);

	return 0;
}

运行结果如下:
【opencv】基本图像形态学操作_第3张图片

你可能感兴趣的:(opencv,计算机视觉,图像处理)