一、概念
dilate(膨胀):
取所操作区域的最大值代替中心像素值(锚点),算子的移动与卷积操作相同。
erode(腐蚀):
取所操作区域的最小值代替中心像素值(锚点)。
形态学梯度:morphology gradient,膨胀减去腐蚀。
开操作:先腐蚀再膨胀
闭操作:先膨胀再腐蚀
顶帽:tophat,源图像与开操作的差值
黑帽:blackhat,闭操作图像与源图像的差值
二、验证代码
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("D:/iPhone/100APPLE/IMG_0070.JPG");
if (!src.data) {
cout << "could not load image..." << endl;
return -1;
}
char input_title[] = "input image";
char output_title[] = "output image";
namedWindow(input_title, CV_WINDOW_AUTOSIZE);
imshow(input_title, src);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
morphologyEx(src, dst, CV_MOP_GRADIENT, kernel);//膨胀减去腐蚀,形态学梯度
morphologyEx(src, dst, CV_MOP_OPEN, kernel);//开操作,先腐蚀再膨胀(可记忆为最后膨胀开),适合去除一些亮斑
morphologyEx(src, dst, CV_MOP_CLOSE, kernel);//闭操作,先膨胀再腐蚀,适合去除一些暗斑
morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);//源图像减去开操作图像,适合用于找到亮斑
morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);//闭操作减去源图像,适合用于找到暗斑
imshow(output_title, dst);
waitKey(0);
return 0;
}