【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() 膨胀运算 作于:由于无法实现理想的二值化,使得原本被连通的像素集被分成不同的连通域,从而影响目标的提取,可以通过膨胀恢复连通性 参数一: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膨胀 参数一: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<opencv2opencv.hpp>
#include<iostream>

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;
}

运行结果如下:

经验分享 程序员 微信小程序 职场和发展