opencv的形态学操作

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

开操作opencv的形态学操作_第1张图片
#include "pch.h"
#include 
#include 
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;
}

opencv的形态学操作_第2张图片
opencv的形态学操作_第3张图片

闭操作
#include "pch.h"
#include 
#include 
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;
}

opencv的形态学操作_第4张图片

顶帽
#include "pch.h"
#include 
#include 
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;
}

opencv的形态学操作_第5张图片

黑帽
#include "pch.h"
#include 
#include 
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;
}

opencv的形态学操作_第6张图片

你可能感兴趣的:(opencv)