cpp编写opencv程序#
配置cpp环境#
Clion中添加依赖#
- 在当前工程下新建一个cmake文件夹,将FindOpenCV.cmake文件拷贝进去
- 修改cmake文件指向自己的opencv所在的库路径
cmake配置文件
1 2 3 4 5 6 7 8 9 |
|
Mat类#
数据类型定义#
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
图像剪切#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
直方图#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
直方图绘制工具#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
直方图均衡化#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
|
直方图匹配#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
|
模板匹配#
模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。
在OpenCV中提供了6种匹配度量方法。
- 平方差匹配法CV_TM_SQDIFF
- 归一化平方差匹配法CV_TM_SQDIFF_NORMED
- 相关匹配法CV_TM_CCORR
- 归一化相关匹配法CV_TM_CCORR_NORMED
- 系数匹配法CV_TM_CCOEFF
- 化相关系数匹配法CV_TMCCOEFF_NORMED
通常来讲,随着从简单测量方法(平方差)到更复杂的测量方法(相关系数法),我们可以获得越来越准确的匹配。然而这同时也会以越来越大的计算量为代价。对于选取何种方法,针对不同的匹配情况进行对此分析比较,选取更适合自己应用场景同时兼顾速度和精度的最佳方案。 注意 :对于方法SQDIFF和SQDIFF_NORMED两种方法来讲,越小的值就有着更高的匹配结果,而其余的方法则是数值越大匹配效果越好。
示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
图像的卷积#
卷积核像一个老奶奶,眼疾手快又很有耐心的把每个像素按照周围的像素要么拔高,要么抹平。拔高就是找边缘、锐化,抹平就是模糊、中值滤波
filter2d#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Sobel算子#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
拉普拉斯算子#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
均值滤波#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
中值滤波#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
高斯滤波#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Canny算法#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
双边滤波#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
膨胀与腐蚀#
形态学变化是基于图像形状的一些简单操作。操作对象一般是二值图像,需要两个输入,一个是我们的原图,另一个是3x3的结构元素(内核),决定了膨胀操作的本质。常见的操作是图像的膨胀和腐蚀。以及他们的进阶操作注入Opening、Closing、Gradient等等。(参考)
结构元素的形状
MORPH_RECT | 矩形 |
---|---|
MORPH_ELLIPSE | 椭圆形 |
MORPH_CROSS | 十字型 |
膨胀Dilation#
跟卷积操作非常类似.有图像A和3x3的结构元素,结构元素在A上进行滑动.计算结构元素在A上覆盖的最大像素值来替换当前结构元素对应的正中间的元素
膨胀的作用:
- 对象边缘增加一个像素
- 使对象边缘平滑
- 减少了对象与对象之间的距离
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
腐蚀Erosion#
腐蚀和膨胀过程类似,唯一不同的是以覆盖的最小值替换当前的像素值
侵蚀的作用:
- 对象边缘减少一个像素
- 对象边缘平滑
- 弱化了对象与对象之间连接
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
开操作Opening#
先腐蚀,后膨胀,主要应用在二值图像或灰度图像
先腐蚀: 让当前窗口中最小的颜色值替换当前颜色值
后膨胀: 让当前窗口中最大的颜色值替换当前颜色值
作用:
- 一般用于消除小的干扰或噪点(验证码图的干扰线)
- 可以通过此操作配合结构元素,提取图像的横线和竖线
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
去除验证码上面的干扰线#
闭操作Closing#
先膨胀,后侵蚀
一般用于填充内部缝隙
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
小结#
形态学变换中还有一些其它的变换,大家可以自行尝试查看执行效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
透视变换#
透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。如下图所示
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
霍夫圆#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
轮廓提取#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
人脸识别小案例#
简单人脸识别#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
人脸替换#
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|