使用OpenCV2.4.9+VS2013
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src, dst;
src = imread("F:\\test1.png");
if (src.empty()) {
cout << "could not load image..." << endl;
cin.get();
cin.get();
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
char output_title[] = "morphology demo";
namedWindow("output image", CV_WINDOW_AUTOSIZE);
imshow("output image", CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
morphologyEx(src, dst, CV_MOP_CLOSE, kernel); //闭操作:先膨胀后腐蚀,可以填充小洞
// morphologyEx(src, dst, CV_MOP_CLOSE, kernel); //开操作:先腐蚀后膨胀,可以去掉小的对象
// morphologyEx(src, dst, CV_MOP_GRADIENT, kernel); //梯度操作:膨胀减去腐蚀
// morphologyEx(src, dst, CV_MOP_TOPHAT, kernel); //顶帽操作:源图像与开操作之间的差值图像
// morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel); //黑猫操作:闭操作与源图像的差值图像
imshow("output_title", dst);
waitKey(0);
return 0;
}