本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials
本篇使用的项目为:open_close、morph_gradient、top_bottom_hat、hit_miss
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char** argv) {
Mat src1 = imread("../sample/morph02.png");
Mat src2 = imread("../sample/morph3.png");
if (src1.empty() || src2.empty()) {
cout << "could not load image..." << endl;
return -1;
}
Mat gray, binary, dst;
// open demo
cvtColor(src1, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
imshow("binary1", binary);
Mat kernel1 = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
morphologyEx(binary, dst, MORPH_OPEN, kernel1, Point(-1, -1), 1);
imshow("open-demo", dst);
// close demo
cvtColor(src2, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
imshow("binary2", binary);
Mat kernel2 = getStructuringElement(MORPH_ELLIPSE, Size(23, 23), Point(-1, -1));
morphologyEx(binary, dst, MORPH_CLOSE, kernel2, Point(-1, -1), 1);
imshow("close-demo", dst);
waitKey(0);
destroyAllWindows();
return 0;
}
开操作 = 腐蚀 + 膨胀
可以删除小的干扰块
闭操作 = 膨胀 + 腐蚀
可以填充闭合区域
morphologyEx:使用腐蚀(erode)和膨胀(dilate)作为基本操作来处理高级的形态学操作
void 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() );
- src:输入图像,通道数可以任意,但是图像深度应该为CV_8U, CV_16U, CV_16S, CV_32F or CV_64F中的一种
- dst:输出图像,与src具有相同的尺寸和类型
- op:形态学操作
- MORPH_ERODE:腐蚀,相当于
erode
函数 - MORPH_DILATE:膨胀,相当于
dilate
函数 - MORPH_OPEN:开运算
- MORPH_CLOSE:闭运算
- MORPH_GRADIENT:形态学基本梯度运算。膨胀 – 腐蚀
- MORPH_TOPHAT:顶帽运算,也叫白帽。顶帽 = 原图 – 开运算
- MORPH_BLACKHAT:黑帽运算,也叫底帽运算。黑帽 = 闭运算 – 原图
- MORPH_HITMISS:击中击不中变换。
- MORPH_ERODE:腐蚀,相当于
- kernel:结构元素,可以通过
getStructuringElement
函数生成 - anchor:锚点。默认(-1,-1),为结构元素中心
- iterations:做多少次腐蚀操作
- borderType:图像边缘处理方式
- borderValue:当borderType为BORDER_CONSTANT时,边缘填充值
形态学梯度运算除了基本梯度运算(膨胀 – 腐蚀),还包括内梯度(原图 – 腐蚀)、外梯度(膨胀 – 原图)
击中击不中变换:
评论 (0)