第12课 形态学操作之开、闭、梯度、顶帽和黑帽操作

1. 开操作(Open)

  1. 开操作是先腐蚀后膨胀
  2. 公式:
    在这里插入图片描述
  3. 作用:可以去掉小的对象,假设对象是前景色,背景是黑色,其效果如下图所示:
    在这里插入图片描述

2.闭操作(Close)

  1. 闭操作是:先膨胀后腐蚀
  2. 公式:
    在这里插入图片描述
  3. 可以fill hole填充小的洞,假设对象是前景色,背景是黑色 在这里插入图片描述

3.形态学梯度(MorphologicalGradient)

  1. 定义:膨胀减去腐蚀
  2. 公式:
    在这里插入图片描述
    3.又称为基本梯度(其他还有内部梯度、方向梯度)
    在这里插入图片描述

4. 顶帽(Top hat)

  1. 顶帽是原图像与开操作之间的差值图像
  2. 其效果如下图所示:
    在这里插入图片描述

5.黑帽(Black hat)

  1. 黑帽是闭操作图像与原图像的差值图像
  2. 其效果为:
    在这里插入图片描述

6.相关API

morphologyEx(src, dest, int OPT, kernel);
  1. 输入图像
  2. 输出图像
  3. 形态学操作类型:开CV_MOP_OPEN、闭CV_MOP_CLOSE、 梯度CV_MOP_GRADIENT 、顶帽 CV_MOP_TOPHAT、黑帽 CV_MOP_BLACKHAT
  4. 结构元素,其构造方法在第10课有介绍
  5. int lteration 迭代次数,默认为1

7.例程

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("D:/vcprojects/images/bin2.png");
	if (!src.data) {
		printf("could not load image...\n");
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);
	char output_title[] = "morphology demo";
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));//构造结构元素
	morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);//形态学操作
	imshow(output_title, dst);

	waitKey(0);
	return 0;
}
发布了31 篇原创文章 · 获赞 12 · 访问量 2777

猜你喜欢

转载自blog.csdn.net/weixin_42877426/article/details/104175877