一篇文章带你顺利通过Python OpenCV入门阶段
1. opencv 初识与安装
本部分要了解 opencv (open source computer vision library)的相关简介,opencv 可以运行在多平台之上,轻量级而且高效,由一系列 c 函数和少量 c++类构成,提供了 python、ruby、matlab 等语言的接口,所以在学习的时候,要注意查阅资料的语言实现相关问题。
这个阶段除了安装 opencv 相关库以外,建议收藏官方网址,官方手册,官方入门教程,这些都是最佳的学习资料。
模块安装完毕,需要重点测试 opencv 是否安装成功,可通过 python 查询安装版本。
2. opencv 模块简介
先从全局上掌握 opencv 都由哪些模块组成。例如下面这些模块,你需要找到下述模块的应用场景与简介。
core、imgproc、highgui、calib3d、features2d、contrib、flann、gpu、legacy、ml、objdetect、photo、stitching。
整理每个模块的核心功能,并完成第一个 opencv 案例,读取显示图片。
3. opencv 图像读取,显示,保存
安装 opencv 之后,从图像获取开始进行学习,包含本地加载图片,相机获取图片,视频获取,创建图像等内容。
只有先获取图像之后,才能对图像进行操作处理,信息提取,结果输出,图像显示,图像保存。
对于一个图像而言,在 opencv 中进行读取展示的步骤如下,你可以将其代码进行对应。
1.图像读取;
2.窗口创建;
3.图像显示;
4.图像保存;
5.资源释放。
涉及需要学习的函数有 cv2.imread()
、cv2.namedwindow()
、cv2.imshow()
、cv2.imwrite()
、cv2.destroywindow()
、cv2.destroyallwindows()
、 cv2.imshow()
、cv2.cvtcolor()
、cv2.imwrite()
、cv2.waitkey()
。
4. 摄像头和视频读取,保存
第一个要重点学习 videocapture
类,该类常用的方法有:
- open() 函数;
- isopened() 函数;
- release() 函数;
- grab() 函数;
- retrieve() 函数;
- get() 函数;
- set() 函数;
除了读取视频外,还需要掌握 opencv 提供的 videowriter
类,用于保存视频文件。
学习完相关知识之后,可以进行这样一个实验,将一个视频逐帧保存为图片。
5. opencv 常用数据结构和颜色空间
这部分要掌握的类有 point
类、rect
类、size
类、scalar
类,除此之外,在 python 中用 numpy
对图像进行操作,所以 numpy
相关的知识点,建议提前学习,效果更佳。
opencv 中常用的颜色空间有 bgr 颜色空间、hsv/hls 颜色空间、lab 颜色空间,这些都需要了解,优先掌握 bgr 颜色空间。
6. opencv 常用绘图函数
掌握如下函数的用法,即可熟练的在 opencv 中绘制图形。
- cv2.line();
- cv2.circle();
- cv2.rectangle();
- cv2.ellipse();
- cv2.fillpoly();
- cv2.polylines();
- cv2.puttext()。
7. opencv 界面事件操作之鼠标与滑动条
第一个要掌握的函数是鼠标操作消息回调函数,cv2.setmousecallback()
,滑动条涉及两个函数,分别是:cv2.createtrackbar()
和 cv2.gettrackbarpos()
。
掌握上述内容之后,可以实现两个案例,其一为鼠标在一张图片上拖动框选区域进行截图,其二是通过滑动条让视频倍速播放。
8. 图像像素、通道分离与合并
了解图像像素矩阵,熟悉图片的像素构成,可以访问指定像素的像素值,并对其进行修改。
通道分离函数 cv2.split()
,通道合并函数 cv2.merge()
。
9. 图像逻辑运算
掌握图像之间的计算,涉及函数如下:
cv2.add();cv2.addweighted();cv2.subtract();cv2.absdiff();cv2.bitwise_and();cv2.bitwise_not();cv2.bitwise_xor()。
还可以研究图像乘除法。
10. 图像 roi 与 mask 掩膜
本部分属于 opencv 中的重点知识,第一个为感兴趣区域 roi,第二个是 mask 掩膜(掩码)操作 。
学习 roi 部分时,还可以学习一下图像的深浅拷贝。
11. 图像几何变换
图像几何变换依旧是对基础函数的学习与理解,涉及内容如下:
- 图像缩放 cv2.resize();
- 图像平移 cv2.warpaffine();
- 图像旋转 cv2.getrotationmatrix2d();
- 图像转置 cv2.transpose();
- 图像镜像 cv2.flip();
- 图像重映射 cv2.remap()。
12. 图像滤波
理解什么是滤波,高频与低频滤波,图像滤波函数。
线性滤波:方框滤波、均值滤波、高斯滤波,
非线性滤波:中值滤波、双边滤波,
- 方框滤波 cv2.boxfilter();
- 均值滤波 cv2.blur();
- 高斯滤波 cv2.gaussianblur();
- 中值滤波 cv2.medianblur();
- 双边滤波 cv2.bilateralfilter()。
13. 图像固定阈值与自适应阈值
图像阈值化是图像处理的重要基础部分,应用很广泛,可以根据灰度差异来分割图像不同部分,阈值化处理的图像一般为单通道图像(灰度图),核心要掌握的两个函数:
- 固定阈值:cv2.threshold();
- 自适应阈值:cv2.adaptivethreshold()。
14. 图像膨胀腐蚀
膨胀、腐蚀属于形态学的操作,是图像基于形状的一系列图像处理操作。
膨胀腐蚀是基于高亮部分(白色)操作的,膨胀是対高亮部分进行膨胀,类似“领域扩张”, 腐蚀是高亮部分被腐蚀,类似“领域被蚕食”。
膨胀腐蚀的应用和功能:
- 消除噪声;
- 分割独立元素或连接相邻元素;
- 寻找图像中的明显极大值、极小值区域;
- 求图像的梯度;
核心需要掌握的函数如下:
- 膨胀 cv2.dilate();
- 腐蚀 cv2.erode()。
形态学其他操作,开运算、闭运算、顶帽、黑帽、形态学梯度 这些都是基于膨胀腐蚀基础之上,利用 cv2.morphologyex()
函数进行操作。
15. 边缘检测
边缘检测可以提取图像重要轮廓信息,减少图像内容,可用于分割图像、特征提取等操作。
边缘检测的一般步骤:
- 滤波: 滤出噪声対检测边缘的影响 ;
- 增强: 可以将像素邻域强度变化凸显出来—梯度算子 ;
- 检测: 阈值方法确定边缘 ;
常用边缘检测算子:
- canny 算子,canny 边缘检测函数 cv2.canny();
- sobel 算子,sobel 边缘检测函数 cv2.sobel();
- scharr 算子,scharr 边缘检测函数 cv2.scahrr() ;
- laplacian 算子,laplacian 边缘检测函数 cv2.laplacian()。
16. 霍夫变换
霍夫变换(hough transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中,通过计算累计结果的局部最大值,得到一个符合该特定形状的集合,作为霍夫变换的结果。
本部分要学习的函数:
- 标准霍夫变换、多尺度霍夫变换 cv2.houghlines() ;
- 累计概率霍夫变换 cv2.houghlinesp() ;
- 霍夫圆变换 cv2.houghcricles() 。
17. 图像直方图计算及绘制
先掌握直方图相关概念,在掌握核心函数,最后通过 matplotlib
模块对直方图进行绘制。计算直方图用到的函数是 cv2.calchist()
。
直方图相关应用:
- 直方图均衡化 cv2.equalizehist();
- 直方图对比 cv2.comparehist();
- 反向投影 cv2.calcbackproject()。
18. 模板匹配
模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。
核心用到的函数如下:
- 模板匹配 cv2.matchtemplate();
- 矩阵归一化 cv2.normalize();
- 寻找最值 cv2.minmaxloc()。
19. 轮廓查找与绘制
核心要理解到在 opencv 中,查找轮廓就像在黑色背景中找白色物体。
常用函数:
- 查找轮廓 cv2.findcontours();
- 绘制轮廓 cv2.drawcontours() 。
最后应该掌握针对每个轮廓进行操作。
20. 轮廓特征属性及应用
这部分内容比较重要,并且知识点比较多,核心内容与函数分别如下:
- 寻找凸包 cv2.convexhull() 与 凸性检测 cv2.iscontourconvex();
- 轮廓外接矩形 cv2.boundingrect();
- 轮廓最小外接矩形 cv2.minarearect();
- 轮廓最小外接圆 cv2.minenclosingcircle();
- 轮廓椭圆拟合 cv2.fitellipse();
- 逼近多边形曲线 cv2.approxpolydp();
- 计算轮廓面积 cv2.contourarea();
- 计算轮廓长度 cv2.arclength();
- 计算点与轮廓的距离及位置关系 cv2.pointpolygontest();
- 形状匹配 cv2.matchshapes()。
21. 高级部分-分水岭算法及图像修补
掌握分水岭算法的原理,掌握核心函数 cv2.watershed()
。
可以扩展补充图像修补技术及相关函数 cv2.inpaint()
,学习完毕可以尝试人像祛斑应用。
22. grabcut & floodfill 图像分割、角点检测
这部分内容都需要一些图像专业背景知识,先掌握相关概念知识,在重点学习相关函数。
- grabcut 算法 cv2.grabcut();
- 漫水填充算法 cv2.floodfill();
- harris 角点检测 cv2.cornerharris();
- shi-tomasi 角点检测 cv2.goodfeaturestotrack();
- 亚像素角点检测 cv2.cornersubpix()。
23. 特征检测与匹配
特征点的检测和匹配是计算机视觉中非常重要的技术之一, 在物体识别、视觉跟踪、三维重建等领域都有很广泛的应用。
opencv 提供了如下特征检测方法:
- “fast” fastfeaturedetector;
- “star” starfeaturedetector;
- “sift” sift(nonfree module) opencv3 移除,需调用 xfeature2d 库;
- “surf” surf(nonfree module) opencv3 移除,需调用 xfeature2d 库;
- “orb” orb opencv3 移除,需调用 xfeature2d 库;
- “mser” mser;
- “gftt” goodfeaturestotrackdetector;
- “harris” (配合 harris detector);
- “dense” densefeaturedetector;
- “simpleblob” simpleblobdetector。
24. opencv 应用部分之运动物体跟踪与人脸识别
了解何为运动物体检测,opencv 中常用的运动物体检测方法有背景减法、帧差法、光流法,跟踪算法常用的有 meanshift
, camshift
,粒子滤波
, 光流法
等。
- meanshift 跟踪算法 cv2.meanshift();
- camshift 跟踪算法 cv2.camshift()。
如果学习人脸识别,涉及的知识点为:
- 人脸检测:从图像中找出人脸位置并标识;
- 人脸识别:从定位到的人脸区域区分出人的姓名或其它信息;
- 机器学习。
以上就是一篇文章带你顺利通过python opencv入门阶段的详细内容,更多关于python opencv的资料请关注其它相关文章!
上一篇: 提子没有面粉怎么洗