本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials
本篇使用的项目为:erode_dilate
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char** argv) {
Mat src = imread("../sample/morph.png");
if (src.empty()) {
cout << "could not load image..." << endl;
return -1;
}
Mat gray, binary;
cvtColor(src, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
imshow("binary", binary);
Mat dst1, dst2;
Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
erode(src, dst1, kernel);
dilate(src, dst2, kernel);
imshow("erode", dst1);
imshow("dilate", dst2);
waitKey(0);
destroyAllWindows();
return 0;
}
erode:腐蚀
相当于最小值滤波:中心像素替换为最小值
void erode( InputArray src, OutputArray dst, 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具有相同的尺寸和类型
- kernel:结构元素,可以通过
getStructuringElement
函数生成 - anchor:锚点。默认(-1,-1),为结构元素中心
- iterations:做多少次腐蚀操作
- borderType:图像边缘处理方式
- borderValue:当borderType为BORDER_CONSTANT时,边缘填充值
dilate:膨胀
相当于最大值滤波:中心像素替换为最大值
void dilate( InputArray src, OutputArray dst, 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具有相同的尺寸和类型
- kernel:结构元素,可以通过
getStructuringElement
函数生成 - anchor:锚点。默认(-1,-1),为结构元素中心
- iterations:做多少次膨胀操作
- borderType:图像边缘处理方式
- borderValue:当borderType为BORDER_CONSTANT时,边缘填充值
getStructuringElement:生成用于形态学操作的特定尺寸和形状的结构元素
Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
- shape:结构元素形状
- MORPH_RECT:矩形
- MORPH_CROSS:十字交叉
- MORPH_ELLIPSE:圆形
- ksize:结构元素尺寸
- anchor:结构元素锚点。默认(-1,-1),为中心
评论 (0)