opencv的形态学操作
函数morphologyEx
- 第一个参数(src): 输入的图像
- 第二个参数(dst): 输出的图像
- 第三个参数(op): 要进行的操作
- 开操作 (MORPH_OPEN): 先腐蚀,后膨胀
- 闭操作(MORPH_CLOSE ): 先膨胀,后腐蚀
- 顶帽(MORPH_GRADIENT): 原图像与开操作之后的图像的差值
- 黑帽(MORPH_BLACKHAT): 闭操作之后的图像与原图像的差值
- 第四个参数(kernel):进行形态学操作的内核,一般设为奇数,默认3
- 第五个参数(anchor): 被称之为锚点,一般默认为Point(-1, -1)
锚点更多参考:https://blog.csdn.net/liquan1434/article/details/22314171 - 第六个参数(iterations): 是函数要执行的次数,一般为1;
- 第七个参数(border type):决定在图像发生几何变换或者滤波操作(卷积)时边沿像素的处理方式,默认值为BORDER_ CONSTANT。
- BORDER_CONSTANT: 就是边沿像素用i替换
- BORDER_REPLICATE:复制边界像素
- BORDER_REFLECT:反射复制边界像素
- BORDER_REFLECT_101:以边界为对称轴反射复制像素
- 第八个参数(borderValue): 当边界为常数时的边界值,可以设置边框的颜色,有默认值为morphologyDefaultBorderValue() ,也可以设置其他的
demo
开操作
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
Mat src = imread("f:/test.png");
imshow("input", src);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
Mat dst;
morphologyEx(src, dst, CV_MOP_OPEN, kernel);
imshow("output", dst);
waitKey(0);
return 0;
}
闭操作
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
Mat src = imread("f:/test.png");
imshow("input", src);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
Mat dst;
morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
imshow("output", dst);
waitKey(0);
return 0;
}
顶帽
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
Mat src = imread("f:/test.png");
imshow("input", src);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
Mat dst;
morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);
imshow("output", dst);
waitKey(0);
return 0;
}
黑帽
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
Mat src = imread("f:/test.png");
imshow("input", src);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
Mat dst;
morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);
imshow("output", dst);
waitKey(0);
return 0;
}