开运算:可以消除暗背景下的较亮区域
闭运算:可以消除亮背景下的较暗区域
顶帽:用原图减去开运算结果就可以得到原图中灰度较亮的区域,所以又称白顶帽变换。还有一个很重要的作用,就是校正不均匀光照。
底帽:用原图减去闭运算结果就可以得到原图中灰度较暗的区域,所有又称黑底帽变换。
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; // 开操作:先腐蚀后膨胀 // 可以去掉小的对象(对象为白色,背景为黑色) // 闭操作:先膨胀后腐蚀 // 可以填充小的洞 // 形态学梯度 Morphological Gradient // 膨胀减去腐蚀 又称为基本梯度(其他还包括 内部梯度、方向梯度) // 顶帽 top hat // 原图像与开操作之间的差值图像 // 黑帽 black hat // 闭操作图像与原图像的差值图像 int main() { Mat src1, src2, gray_src, dst; src1 = imread("/Users/apple/Desktop/birth.jpg", IMREAD_COLOR); //src2 = imread("/Users/apple/Desktop/test2.jpg", IMREAD_COLOR); if (src1.empty()) { // if (!src.data()) cout << "could not load image..." << endl; return -1; } imshow("input", src1); // Mat kernel = getStructuringElement(MORPH_RECT, Size(1, 11)); // morphologyEx(src1, dst, CV_MOP_DILATE, kernel); GaussianBlur(src1, dst, Size(99, 3), 100, 1); //blur(src1, dst, Size(99, 1)); imshow("output", dst); waitKey(0); return 0; }