图像形态学的作用是简化图像数据,保持基本图像特性,取出不相干结构等。
目录:
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<opencv2\opencv.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;
}
运行结果如下: