图象腐蚀与形态学操作 opencv

1. 通过调用库函数实现图像的腐蚀、膨胀;

2. 通过设置结构元素、元素大小、形态学操作类型实现对图象的形态学操作。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

源码(VS2017+OpenCV 4.0)

 1 #include <iostream>
 2 #include <opencv2/opencv.hpp>
 3 #include <opencv2/core.hpp>
 4 #include <opencv2/highgui.hpp>
 5 #include <opencv2/imgproc/imgproc.hpp>
 6 #include <opencv2/imgproc/types_c.h>
 7 using namespace std;
 8 using namespace cv;
 9 
10 //全局变量
11 Mat src, res;
12 int slider = 0;//腐蚀膨胀滑杆
13 const int slider_max = 30;
14 int operation = 0;//形态学操作类型
15 const int operation_max = 4;
16 int kenl = 0;//内核类型
17 const int kenl_max = 2;
18 int kenl_size = 1;//内核大小
19 const int kenl_size_max = 4;
20 
21 //回调函数
22 void on_trackbar(int pos, void*);
23 //腐蚀
24 void getErodeAndDilate(int level, int pattern);
25 
26 //腐蚀
27 void getErodeAndDilate(int level, int pattern)
28 {
29     //进行腐蚀/膨胀
30     if(pattern == 0)
31         erode(src, res, Mat(), Point(-1, -1), level);
32     else if(pattern == 1)
33         dilate(src, res, Mat(), Point(-1, -1), level);
34 
35     imshow("处理结果1", res);
36 }
37 
38 //回调函数:腐蚀
39 void on_trackbar1(int pos, void*)
40 {
41     getErodeAndDilate(pos, 0);
42 }
43 
44 //回调函数:膨胀
45 void on_trackbar2(int pos, void*)
46 {
47     getErodeAndDilate(pos, 1);
48 }
49 
50 //回调函数:形态学操作类型
51 void on_trackbar3(int pos, void*)
52 {
53     int op = pos + 2;
54     //选择内核形状
55     Mat elemment = getStructuringElement(kenl, Size(2 * kenl_size + 1, 2 * kenl_size + 1));
56 
57     morphologyEx(src, res, op, elemment);
58     imshow("处理结果2", res);
59 }
60 
61 int main()
62 {    
63     string file = "D:\\trashBox\\testIMG\\monkey.jpg";
64     src = imread(file);
65     if (!src.data)
66     {
67         cout << "图片读取失败." << endl;
68         return 0;
69     }
70     namedWindow("处理结果1");
71     //创建选择腐蚀次数的 trackbar
72     createTrackbar("腐蚀级数", "处理结果1", &slider, slider_max, on_trackbar1);
73     //创建选择膨胀次数的 trackbar
74     createTrackbar("膨胀级数", "处理结果1", &slider, slider_max, on_trackbar2);
75 
76     namedWindow("处理结果2");
77     //创建选择具体操作的 trackbar
78     createTrackbar("形态学操作\n开运算-0\n闭运算-1\n梯度-2\nTopHat-3\nBlackHat-4", "处理结果2", &operation, operation_max, on_trackbar3);
79     //创建选择内核形状的 trackbar
80     createTrackbar("结构元素:\n 0: Rect - 1: Cross - 2: Ellipse", "处理结果2", &kenl, kenl_max, on_trackbar3);
81     //创建选择内核大小的 trackbar
82     createTrackbar("内核大小:\n 2n +1", "处理结果2", &kenl_size, kenl_size_max, on_trackbar3);
83 
84     waitKey(0);
85     return 0;
86 }

效果图

1. 图像腐蚀、膨胀

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第1张

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第2张

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第3张

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第4张

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第5张

2. 形态学操作

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第6张

OpenCV 图象腐蚀形态学操作 全家桶 随笔 第7张

其他组合操作,自己去探索吧,挺有趣的!

 

更多opencv中文资料,参考这里哟!

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄