OpenCV-学习历程10/11- 形态学操作(开操作/闭操作/形态学梯度/顶帽/黑帽)(!主要是用于二值化图像进行处理)

OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。

注意! 形态学操作虽然是由简单的膨胀和腐蚀组合而成,实际上OPENCV有统一的形态学操作API可以使用 。

           ->形态学操作调用这个API就好

 

一.开操作(先腐蚀后膨胀)

     作用:去除一些小的缺陷。

     原理:首先用腐蚀去掉一些小的缺陷对象,然后使用膨胀,将被腐蚀掉的有用信息复原。

                       

二.闭操作(先膨胀和腐蚀)

     作用:填补一些孔洞。

             

三.形态学梯度(Morphological Gradient)

                         

四.顶帽(Top hat)

                       

四.黑帽(Black hat)

                                                  

三.代码

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


using namespace std;
using namespace cv;



int main(int argc, char** argv) {
	Mat src, dst;
	//Step1 读取图片
	src = imread("E:/OpenCVLearning/Project/source_image/close.jpg"); //注意斜线方向
	if (!src.data) {
		cout << "Could not load the image ...." << endl;
		return -1;
	}
	//Step2 显示输入图片
	namedWindow("Input_image",CV_WINDOW_AUTOSIZE);
	imshow("Input_image",src);

	//Step3 定义输出窗口
	char output_title[] = "Morphology demo";
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	//Step4 设置形态学操作
	/*************************开操作(先腐蚀后膨胀)***********************************/
	   //!!设定结构元素(mask)
	//Mat kernel = getStructuringElement(MORPH_RECT,Size(11,11),Point(-1,-1));// (矩形算子,尺寸,中心点位置)
	  //!!使用形态学算子进行开操作
	//morphologyEx(src,dst,CV_MOP_OPEN,kernel);                             //(输入,输出,形态学操作名,算子)
	//imshow(output_title,dst);

	/************************闭操作(先膨胀后腐蚀)***********************************/
     //!!设定结构元素(mask)
	//Mat kernel = getStructuringElement(MORPH_RECT,Size(11,11),Point(-1,-1));// (矩形算子,尺寸,中心点位置)
	  //!!使用形态学算子进行闭操作
	//morphologyEx(src,dst,CV_MOP_CLOSE,kernel);                             //(输入,输出,形态学操作名,算子)
	//imshow(output_title,dst);

	/************************形态学梯度***********************************/
 //!!设定结构元素(mask)
	//Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));// (矩形算子,尺寸,中心点位置)
	  //!!使用形态学算子进行闭操作
	//morphologyEx(src, dst, CV_MOP_GRADIENT, kernel);                             //(输入,输出,形态学操作名,算子)
	//imshow(output_title, dst);


	/************************顶帽(开操作-原图)***********************************/
		//!!设定结构元素(mask)
	//Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));// (矩形算子,尺寸,中心点位置)
	  //!!使用形态学算子进行顶帽操作
	//morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);                             //(输入,输出,形态学操作名,算子)
	//imshow(output_title, dst);


	/************************黑帽(闭操作-原图)***********************************/
	//!!设定结构元素(mask)
	Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));// (矩形算子,尺寸,中心点位置)
	  //!!使用形态学算子进行顶帽操作
	morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);                             //(输入,输出,形态学操作名,算子)
	imshow(output_title, dst);



	waitKey(0);
	return 0;
}

四.效果

猜你喜欢

转载自blog.csdn.net/weixin_42503785/article/details/113927180