
3.9 视觉OpenCV
OpenCV(Opensource Computer Vision Library)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上,同时提供了Python、Ruby、MATLAB等语言的接口,可实现图像处理和计算机视觉方面的很多通用算法。虽然Python有自己的图像处理库PIL,但是相对于OpenCV来讲,功能比较弱,OpenCV提供了完善的Python接口,非常便于调用。OpenCV包含了超过2500个算法和函数,可以实现大部分视觉处理功能。
OpenCV典型应用领域如下:(1)人机互动;(2)物体识别;(3)图像分割;(4)人脸识别;(5)动作识别;(6)运动跟踪;(7)机器人;(8)运动分析;(9)机器视觉;(10)结构分析;(11)汽车安全驾驶。
OpenCV的Python主页:https://pypi.org/project/opencv-python/,如图3-56所示。

图3-56 OpenCV的Python主页
当前的OpenCV有两个版本:OpenCV2和OpenCV3。OpenCV3较OpenCV2提供了更强的功能和更多方便的特性,带来了全新的项目架构的改变。OpenCV3抛弃了整体统一架构,使用“内核+插件”的架构形式,更加稳定,附加的库更加灵活多变,从而保持高速的发展与迭代。
3.9.1 OpenCV的安装
OpenCV的pip安装命令为“pip install opencv-python”,如图3-57所示。

图3-57 OpenCV的pip安装
OpenCV在PyCharm中的安装方法是在主界面选择菜单命令“File>Settings”,打开Settings窗口,操作如图3-58所示。

图3-58 OpenCV在PyCharm中的安装
OpenCV安装完成以后,其中已经包含了基于OpenCV harr级联分类器的人脸及眼睛、鼻子、嘴巴检测器,位于CV2包的data目录,如图3-59所示。
其中,“haarcascade_eye_tree_eyeglasses.xml”为人脸检测的人眼检测分类器,“haarcascade_smile.xml”用于实现对人脸、笑脸同时检测。

图3-59 OpenCV自带的人脸及眼睛、鼻子、嘴巴检测器
3.9.2 OpenCV的使用
OpenCV提供了图像和视频两方面的处理功能,这些功能主要包括图像的基础操作、图像上的算术运算、颜色空间变化、图像几何变换、图像平滑、图像形态学转换、图像梯度、边缘检测、图像变换(傅里叶变换、Hough变换)、图像特征提取、视频分析、摄像机标定、3D重构、机器学习、计算摄影学、对象检测等。
下面介绍一些OpenCV的常用函数。
(1)cv2.VideoCapture(参数):读取视频,参数如果是数字,则对应摄像头编号,参数也可以是视频名。
(2)cv2.imread(参数):读取图像,参数是图像路径。
(3)cv2.imshow(参数1,参数2):显示图像,“参数1”为显示的标题,“参数2”为显示的图像,为cv2.imread()的返回值。
(4)cv2.waitKey(参数):在一个给定的时间内(单位ms)等待用户按键触发,如果为0,则一直等待。
(5)cv2.imwrite(参数1,参数2):保存图像,“参数1”为保存路径,“参数2”为保存的图像,为cv2.imread()的返回值。
(6)cv2.putText():图像加文字,包含7个参数,“参数1”为图像,“参数2”为文字内容,“参数3”为坐标位置,“参数4”为字体,“参数5”为字号,“参数6”为颜色,“参数7”为字体粗细。
(7)cv2.rectangle():图像内加矩形框,包含5个参数,“参数1”为图像,“参数2”为左上角坐标,“参数3”为右下角坐标,“参数4”为框的颜色,“参数5”为框的粗细。
(8)cv2.cvtColor(参数1,参数2):图像颜色转换,“参数1”为图像,“参数2”为转换方式。例如“cv2.COLOR_BGR2GRAY”表示转换为灰度图,“cv2.COLOR_BGR2HSV”表示转换为HSV颜色空间。
(9)cv2.GaussianBlur():高斯平滑滤波,包含3个参数,“参数1”为图像,“参数2”为滤波器大小,“参数3”为标准差。
(10)cv2. circle ():图像加圆形框,包含6个参数,“参数1”为图像,“参数2”为圆心X坐标,“参数3”为圆心Y坐标,“参数4”为半径,“参数5”为框的颜色,“参数6”为框的粗细。
在下面的示例中,使用OpenCV内置的检测器识别人的眼睛,并且画出标识框,代码如下。

程序运行结果如图3-60所示。

图3-60 OpenCV人眼识别
在下面的示例中,使用OpenCV内置的检测器识别笑脸,并且画出标识框,代码如下。

程序运行结果如图3-61所示。

图3-61 OpenCV笑脸识别