形态学操作--特征提取

匿名 (未验证) 提交于 2019-12-03 00:19:01
膨胀腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。

(1)二值图像与灰度图像上的腐蚀操作原理

(2)二值图像与灰度图像上的膨胀操作原理

(3)结构元素,上述膨胀与腐蚀过程可以使用任意的结构元素(矩形、圆、直线)

操作步骤
(1)输入图像彩色图像 - imread()
(4)定义结构元素 - getStructuringElement()
(5)开操作 (腐蚀+膨胀)提取 水平与垂直线
(6)后处理 - bitwise_not()
源代码
#include <opencv2/opencv.hpp> #include <iostream>  using namespace cv;  int main(int argc, char** argv) { 	Mat src, dst; 	src = imread("C:/Desktop/omd_Opencv/ms/2018-05-09_161301.png");//输入彩色图像 	if (!src.data){ 		printf("could not load image...\n"); 		return -1; 	} 	 	char INPUT_WIN[] = "input image"; 	char OUTPUT_WIN[] = "result image"; 	namedWindow(INPUT_WIN,CV_WINDOW_AUTOSIZE); 	imshow(INPUT_WIN,src);  	Mat gray_src; 	cvtColor(src, gray_src, CV_BGR2GRAY); //转换为灰度图像 	imshow("gray image",gray_src);  	Mat binImg; 	adaptiveThreshold(~gray_src,binImg,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,15,-2);//转换为二值图像,~gray_src取反白底显示 	imshow("bin image",binImg); 	//矩形结构 	Mat kernel = getStructuringElement(MORPH_RECT, Size(2,2), Point(-1, -1));//注意:一般Size(x, y), x, y 必须是正数而且是奇数  	Mat temp; 	//开操作(先腐蚀后膨胀),目的:去掉细小的对象 	erode(binImg, temp, kernel);//形态学操作 - 腐蚀 	dilate(temp, dst, kernel);//形态学操作-膨胀 	bitwise_not(dst,dst);//做后处理,像素取反操作  	imshow("final Result",dst);  	waitKey(0); 	return 0; }

运行结果



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!