开操作即为先腐蚀后膨胀。以单通道的黑白图像为例,先通过腐蚀操作,将黑色区域腐蚀扩大,再通过膨胀操作,将白色区域膨胀扩大。如果图像上有一个小白色像素点,先通过腐蚀操作,被周围的黑色像素点覆盖掉,再进行膨胀操作,去掉小的白色像素点。
在二值图中,表现为去掉白色的小点或填充黑点
形态学操作API函数接口:
- void cv::morphologyEx ( InputArray src,
- OutputArray dst,
- int op,
- InputArray kernel,
- Point anchor = Point(-1,-1),
- int iterations = 1,
- int borderType = BORDER_CONSTANT,
- const Scalar & borderValue = morphologyDefaultBorderValue()
- )
-
-
- (1)InputArray类型的src,输入图像。通道数可以任意,但深度应为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F之一。
-
- (2)OutputArray类型的dst,即目标图像,与输入图像有相同的尺寸和类型。
-
- (3)int类型的op,形态学操作的类型,请参见cv::MorphTypes
-
- (4)InputArray类型的kernel,用于膨胀的结构元素;如果elemenat=Mat(),则使用3 x 3矩形结构元素。可以使用getStructuringElement创建内核。
-
- (5)Point类型的anchor:锚定在元素中的位置;默认值(-1,-1)表示锚定在元素中心。
-
- (6)int类型的iterations:应用膨胀的次数。
-
- (7)int类型的borderType:像素外推方法,参见cv::BorderTypes。
-
- (8)Scalar类型的borderValue:恒定边框时的边框值。
cv::MorphTypes结构体内容如下:
- enum MorphTypes{
- MORPH_ERODE = 0, //腐蚀
- MORPH_DILATE = 1, //膨胀
- MORPH_OPEN = 2, //开操作
- MORPH_CLOSE = 3, //闭操作
- MORPH_GRADIENT = 4, //梯度操作
- MORPH_TOPHAT = 5, //顶帽操作
- MORPH_BLACKHAT = 6, //黑帽操作
- };
二.闭操作:
闭操作即为先膨胀后腐蚀,以单通道的黑白图像为例,先通过膨胀操作,将白色区域膨胀扩大,再通过腐蚀操作,将黑色区域腐蚀扩大。一个小的黑色像素点,先通过膨胀操作,被周围的白色覆盖掉,再进行腐蚀操作,去除小的黑色像素点。也就是合适的闭操作,可以填充小对象。
=========================================================================
代码实现:
- #include"stdafx.h"
- #include
- #include
- #include
-
- using namespace std;
- using namespace cv;
-
- int main()
- {
-
- Mat image1 = imread("F:/photo/qx.jpg", 1);
- namedWindow("input_picture1");
- imshow("input_picture1", image1);
-
- Mat image2;
- Mat image3;
- cvtColor(image1, image2, COLOR_RGB2GRAY);
- namedWindow("input_picture2");
- imshow("input_picture2", image2);
-
- threshold(image2, image3, 65, 255, THRESH_BINARY);
- namedWindow("input_picture3");
- imshow("input_picture3", image3);
-
-
- Mat dst;
- Mat kernel = getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1));
- //开操作
- morphologyEx(image3, dst, CV_MOP_OPEN, kernel);
- imshow("open-src", dst);
- //闭操作
- morphologyEx(image3, dst, CV_MOP_CLOSE, kernel);
- imshow("close-src", dst);
- //形态学梯度
- //morphologyEx(image3, dst, CV_MOP_GRADIENT, kernel);
- //imshow("gradient-src", dst);
- //顶帽
- //morphologyEx(image3, dst, CV_MOP_TOPHAT, kernel);
- //imshow("tophat-src", dst);
- //黑帽
- //morphologyEx(image3, dst, CV_MOP_BLACKHAT, kernel);
- //imshow("blackhat-src", dst);
-
- waitKey(0);
- return 0;
- }
-
图像处理效果:
原图和灰度图片
灰度图和二值化图
图像开操作和闭操作