1
- #### 前言
2
- OpenCV环境的搭建,详见:[ Ubuntu安装配置OpenCV] ( https://www.jianshu.com/p/59608e83becb )
1
+ ## 前言
2
+ OpenCV环境的搭建,详见:[ Ubuntu安装配置OpenCV] ( ./Ubuntu%2018.04安装配置OpenCV%204.4.0.md )
3
3
Windows下配置OpenCV,可以参考:[ 基于VS2019配置opencv4.0] ( https://blog.csdn.net/qq_26884501/article/details/90770131 )
4
4
5
- #### 一、基础
6
- 首先了解一下OpenCV中的一些基本操作,在OpenCV中图像的基本容器定义为` Mat ` 对象。
7
- 1.` imread() ` 打开图像,参数为图像的路径
5
+ ## 一、基础
6
+ 首先了解一下OpenCV中的一些基本操作,在OpenCV中图像的基本容器定义为 ` Mat ` 对象。
7
+ 1.` imread() ` 打开图像,参数为图像的路径
8
8
```
9
9
Mat srcImage = imread("opencv.jpg");
10
10
```
11
- 2.` imshow() ` 显示图像,参数为窗口标题,显示图像的Mat对象
11
+ 2.` imshow() ` 显示图像,参数为窗口标题,显示图像的Mat对象
12
12
```
13
13
imshow("Display window",srcImage);
14
14
```
15
- 3.` imwrite() ` 保存图像,参数为文件名,保存图像的Mat对象
15
+ 3.` imwrite() ` 保存图像,参数为文件名,保存图像的Mat对象
16
16
```
17
17
imwrite("New_opencv.jpg", srcImage);
18
18
```
@@ -23,7 +23,7 @@ Mat Image_1 = imread("opencv.jpg");
23
23
Mat Image_2;
24
24
Image_2 = Image_1; //当修改Image_2时,Image_1也会被改变
25
25
```
26
- 所以在OpenCV中,使用` clone() ` 或 ` copyTo() ` 来复制Mat对象
26
+ 所以在OpenCV中,使用 ` clone() ` 或 ` copyTo() ` 来复制Mat对象
27
27
```
28
28
Mat Image_1 = imread("opencv.jpg");
29
29
Mat Image_2;
@@ -32,50 +32,54 @@ Image_2 = Image_1.clone();
32
32
//copyTo()
33
33
Image_1.copyTo(Image_2);
34
34
```
35
- #### 二、颜色空间转换
36
- ` cvtColor() ` 用于将图像从一个颜色空间转换到另一个颜色空间的转换,例如常用的转化为灰度图
35
+ ## 二、颜色空间转换
36
+ ` cvtColor() ` 用于将图像从一个颜色空间转换到另一个颜色空间的转换,例如常用的转化为灰度图
37
37
```
38
38
cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
39
39
```
40
40
参数说明:
41
- ` srcImage ` 为输入图像的Mat对象;
42
- ` grayImage ` 为输出图像的Mat对象;
43
- ` COLOR_BGR2GRAY ` 为颜色映射码,即将什么制式的图像转换成什么制式的图像;
41
+ ` srcImage ` 为输入图像的Mat对象;
42
+ ` grayImage ` 为输出图像的Mat对象;
43
+ ` COLOR_BGR2GRAY ` 为颜色映射码,即将什么制式的图像转换成什么制式的图像;
44
44
最后还有一个参数为指定目标图像的通道数,默认为0。
45
- 此函数支持多种颜色空间之间的转换,其支持的转换类型和转换码有: ` COLOR_BGR2RGB ` 、` COLOR_RGB2BGR ` 、` COLOR_GRAY2BGR ` 等等,具体可以参考官方文档。
46
- #### 三、getStructuringElement函数
47
- ` getStructuringElement() ` 用于返回指定形状和尺寸的卷积核
45
+ 此函数支持多种颜色空间之间的转换,其支持的转换类型和转换码有: ` COLOR_BGR2RGB ` 、` COLOR_RGB2BGR ` 、` COLOR_GRAY2BGR ` 等等,具体可以参考官方文档。
46
+
47
+ ## 三、getStructuringElement函数
48
+ ` getStructuringElement() ` 用于返回指定形状和尺寸的卷积核
48
49
```
49
50
Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));
50
51
```
51
- ` shape ` 表示内核的形状,有三种形状:
52
+ ` shape ` 表示内核的形状,有三种形状:
52
53
- 矩形:MORPH_RECT; 值为 0
53
54
- 交叉形:MORPH_CROSS; 值为 1
54
55
- 椭圆形:MORPH_ELLIPSE; 值为 2
55
56
56
- ` esize ` 表示内核的尺寸;` anchor ` 表示锚点的位置,默认值为Point(-1, -1),表示锚点位于中心。
57
- 此函数通常在侵蚀和扩张操作之前使用,用于生成其操作的内核。
58
- #### 四、图像侵蚀和膨胀
59
- ` erode() ` 用于图像侵蚀操作;` dilate() ` 用于图像膨胀操作
57
+ ` esize ` 表示内核的尺寸;` anchor ` 表示锚点的位置,默认值为Point(-1, -1),表示锚点位于中心。
58
+ 此函数通常在侵蚀和扩张操作之前使用,用于生成其操作的内核。
59
+
60
+ ## 四、图像侵蚀和膨胀
61
+ ` erode() ` 用于图像侵蚀操作;` dilate() ` 用于图像膨胀操作
60
62
```
61
63
erode(src, dst, element);
62
64
dilate(src, dst, element);
63
65
```
64
- ` src ` 为输入图像;` dst ` 为输出图像;` element ` 即为上文使用 ` getStructuringElement() ` 生成的操作内核。
65
- 当然,` erode() ` 和` dilate() ` 有多种重载,例如操作内核可以不使用` getStructuringElement() ` 来生成,直接将变量作为函数参数写入等等。具体可以参考官方文档。
66
- #### 五、图像二值化
67
- 二值化,即将图像上的像素点的灰度值设置为0或255,可以理解为黑白图。常用的方法为:简单阈值` threshold() ` 和自适应阈值` adaptiveThreshold() `
66
+ ` src ` 为输入图像;` dst ` 为输出图像;` element ` 即为上文使用 ` getStructuringElement() ` 生成的操作内核。
67
+
68
+ 当然,` erode() ` 和 ` dilate() ` 有多种重载,例如操作内核可以不使用 ` getStructuringElement() ` 来生成,直接将变量作为函数参数写入等等。具体可以参考官方文档。
69
+
70
+ ## 五、图像二值化
71
+ 二值化,即将图像上的像素点的灰度值设置为0或255,可以理解为黑白图。常用的方法为:简单阈值 ` threshold() ` 和自适应阈值 ` adaptiveThreshold() `
68
72
注:图像二值化之前,首先需要将图像转化为灰度图。
69
- ** 简单阈值` threshold() ` ** :
73
+ ** 简单阈值 ` threshold() ` ** :
70
74
```
71
75
threshold(Mat src, Mat dst, int thresh, int maxVal, thresholdType);
72
76
```
73
77
参数说明:
74
- src:原图像。
75
- dst:结果图像。
76
- thresh:设置的当前阈值。
77
- maxVal:最大阈值,一般为255。
78
- thresholdType:阈值类型,主要有下面几种:
78
+ ` src ` :原图像。
79
+ ` dst ` :结果图像。
80
+ ` thresh ` :设置的当前阈值。
81
+ ` maxVal ` :最大阈值,一般为255。
82
+ ` thresholdType ` :阈值类型,主要有下面几种:
79
83
```
80
84
THRESH_BINARY //二进制阈值化
81
85
THRESH_BINARY_INV //反二进制阈值化
@@ -88,21 +92,21 @@ THRESH_TRIANGLE
88
92
```
89
93
不同的阈值类型表示不同的阈值计算方法,这里不再赘述。
90
94
91
- ** 自适应阈值` adaptiveThreshold() ` **
95
+ ** 自适应阈值 ` adaptiveThreshold() ` **
92
96
```
93
97
adaptiveThreshold(Mat src, Mat dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)
94
98
```
95
99
参数说明:
96
- ` src ` :源图像。
97
- ` dst ` :输出图像。
98
- ` maxVal ` :最大阈值,一般为255。
99
- ` adaptiveMethod ` :表示在一个邻域内计算阈值所采用的算法,分别为 ` ADAPTIVE_THRESH_MEAN_C ` 和 ` ADAPTIVE_THRESH_GAUSSIAN_C ` 。
100
+ ` src ` :源图像。
101
+ ` dst ` :输出图像。
102
+ ` maxVal ` :最大阈值,一般为255。
103
+ ` adaptiveMethod ` :表示在一个邻域内计算阈值所采用的算法,分别为 ` ADAPTIVE_THRESH_MEAN_C ` 和 ` ADAPTIVE_THRESH_GAUSSIAN_C ` 。
100
104
```
101
105
ADAPTIVE_THRESH_MEAN_C:表示计算出局部领域块的平均值再减去第七个参数C的值
102
106
ADAPTIVE_THRESH_GAUSSIAN_C:表示计算出局部领域块的高斯均值再减去第七个参数C的值
103
107
```
104
- ` thresholdType ` :表示阈值类型,分别为 ` THRESH_BINARY ` 和 ` THRESH_BINARY_INV ` 。(即二进制阈值或反二进制阈值)
105
- ` blockSize ` :表示计算阈值的像素邻域块的大小,值一般为3、5、7等等。
106
- ` C ` :即偏移值调整量,可以是负数。
108
+ ` thresholdType ` :表示阈值类型,分别为 ` THRESH_BINARY ` 和 ` THRESH_BINARY_INV ` 。(即二进制阈值或反二进制阈值)
109
+ ` blockSize ` :表示计算阈值的像素邻域块的大小,值一般为3、5、7等等。
110
+ ` C ` :即偏移值调整量,可以是负数。
107
111
108
112
对于有明显的光暗反差的图像,使用全局阈值(简单阈值)的效果会非常差,推荐根据图像的特征使用自适应阈值进行二值化。
0 commit comments