首页 理论教育 Python计算机视觉库OpenCV最新实践技巧

Python计算机视觉库OpenCV最新实践技巧

时间:2023-06-23 理论教育 版权反馈
【摘要】:它由一系列C函数和少量C++类构成,同时提供了Python、Ruby、Matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。下面以人脸识别为例来介绍OpenCV的基本使用。OpenCV提供了多种人体器官检测的级联分类器,通过不同的分类器实现对多种人体器官的检测。其中,OpenCV级联分类器haarcascade_frontalface_default.xml是OpenCV安装后自带的分类器中的一种,用于进行人脸检测,为开发者屏蔽了人脸检测中的各种复杂问题,极大地降低了开发工作量。

Python计算机视觉库OpenCV最新实践技巧

OpenCV是Intel开源计算机视觉库(Computer Version),可以运行在Linux、Windows、Android和Mac OS操作系统上。它由一系列C函数和少量C++类构成,同时提供了Python、Ruby、Matlab等语言接口,实现了图像处理和计算机视觉方面的很多通用算法。可以用OpenCV训练自己的分类器来识别任何物体。下面以人脸识别为例来介绍OpenCV的基本使用。

1.OpenCV基本使用

(1)图片读取与显示

读取图片是OpenCV最基本的操作之一,OpenCV中通过imread()函数来读取图片路径,再使用imshow()函数将图片显示出来,具体代码结构如下:

其中,filename是需要读取的图像路径和名称;flag是可选参数,是指以何种方式加载读取图片,具体使用方法见表4-1。

表4-1 flag取值表

例如,读取并显示“imgs”路径下的名为“face_exam0.jpg”的图片并显示如下代码:

结果如图4-9所示。

图4-9 用CV2读取并显示的图片

(2)绘制图像

在进行人脸检测的时候,一般会使用矩形框或者圆形将检测到的人脸框出来,这时就需要使用OpenCV提供的图形函数rectangle()方法。cv2.rectangle()方法用于在任何图像上绘制矩形。

用法:

参数含义见表4-2。

表4-2 rectangle参数

例如,在图片“face_exam0.jpg”上画矩形框的代码如下:

(www.xing528.com)

运行结果如图4-10所示。

图4-10 在图片上画矩形框

2.人脸检测

人脸检测(Face Detection)是自动人脸识别系统中的一个关键环节,即对于任意一幅给定图像,返回图像中的所有人脸位置、大小和姿态。人脸检测的目标是找出所有人脸对应的位置,算法的输出是人脸外接矩形在图像中的坐标,可能还包括姿态等信息,虽然人脸的结构是确定的,但是人脸检测仍是一个复杂的具有挑战性的问题,一方面,是人脸内在的变化,另一方面,由于外在条件的变化,这些因素都为准确地检测处于各种条件下的人脸造成很大的难度。所以,在人脸检测算法中主要解决以下几个核心问题:

①人脸部的一些细节变化。

②人脸可能出现在图像中的任何一个位置。

③人脸可能有不同的大小。

④由于成像角度的不同而造成人脸的多姿态。

⑤人脸可能部分被眼镜、头发及其他外物遮挡。

OpenCV提供了多种人体器官检测的级联分类器,通过不同的分类器实现对多种人体器官的检测。通过https//github.com/opencv/opencv/tree/master/data/haarcascades链接可下载所需分类器。其中,OpenCV级联分类器haarcascade_frontalface_default.xml是OpenCV安装后自带的分类器中的一种,用于进行人脸检测,为开发者屏蔽了人脸检测中的各种复杂问题,极大地降低了开发工作量。

通过级联分类器可以实现对人脸多个器官的检测,包括人脸、眼睛等器官。首先需要通过OpenCV内置的CascadeClassifier()函数加载人脸级联分类器(分类器的地址要根据实际存放分类器的地址进行更改,这里的分类器被存放在当前路径下,所以地址为“./haarcascade_frontalface_default.xml”),代码如下:

加载完成,即实例化了一个人脸分类器对象classfier,接下来就可以利用classfier对象获取视频中或者图片里的人脸,这里使用它的detectMultiScale()方法来进行人脸的检测,代码如下:

具体参数见表4-3。

表4-3 人脸检测参数

人脸检测返回的结果是一个由检测到的所有的人脸组成的数组,数组的每个元素代表一个人脸在图像中所处的位置,该位置信息由4个元素组成,即起始点的X坐标值、起始点的Y坐标值、宽度、高度。图4-11所示的检测结果表示检测到7个人脸,其中检测到的第一个人脸的像素位置在(766,221),宽为60像素,高也为60像素。

图4-11 检测到的人脸的位置信息

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈