膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。
(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; }
运行结果
文章来源: 形态学操作--特征提取