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;
}
四.效果