【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;
}
运行结果如下:
