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

目录

  • 1. 开操作(Open)
  • 2.闭操作(Close)
  • 3.形态学梯度(MorphologicalGradient)
  • 4. 顶帽(Top hat)
  • 5.黑帽(Black hat)
  • 6.相关API
  • 7.例程

1. 开操作(Open)

  1. 开操作是先腐蚀后膨胀
  2. 公式:
    在这里插入图片描述
  3. 作用:可以去掉小的对象,假设对象是前景色,背景是黑色,其效果如下图所示:
    第12课 形态学操作之开、闭、梯度、顶帽和黑帽操作_第1张图片

2.闭操作(Close)

  1. 闭操作是:先膨胀后腐蚀
  2. 公式:
    在这里插入图片描述
  3. 可以fill hole填充小的洞,假设对象是前景色,背景是黑色 第12课 形态学操作之开、闭、梯度、顶帽和黑帽操作_第2张图片

3.形态学梯度(MorphologicalGradient)

  1. 定义:膨胀减去腐蚀
  2. 公式:
    在这里插入图片描述
    3.又称为基本梯度(其他还有内部梯度、方向梯度)
    第12课 形态学操作之开、闭、梯度、顶帽和黑帽操作_第3张图片

4. 顶帽(Top hat)

  1. 顶帽是原图像与开操作之间的差值图像
  2. 其效果如下图所示:
    第12课 形态学操作之开、闭、梯度、顶帽和黑帽操作_第4张图片

5.黑帽(Black hat)

  1. 黑帽是闭操作图像与原图像的差值图像
  2. 其效果为:
    第12课 形态学操作之开、闭、梯度、顶帽和黑帽操作_第5张图片

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 
#include 
#include 

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;
}

你可能感兴趣的:(OpenCV学习笔记)