Python OpenCV 人脸识别

简单运用Python OpenCV对图片进行人脸识别,

我们先看效果及代码:

 

import cv2

img1 = cv2.imread('6.jpeg')
gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
face_detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
faces = face_detector.detectMultiScale(gray, 1.1, 3,cv2.CASCADE_SCALE_IMAGE,(50,50),(100,100))
for (x, y, w, h) in faces:
    cv2.rectangle(img1, (x, y), (x + w, y + w), (0, 255, 0),2)

cv2.imshow("img",img1)
cv2.waitKey(0) 

看着几行代码也是很简单,挨着介绍一下,方便于理解

import cv2  即导入opencv2模块,导入才能使用opencv,类似于C语言中的头文件。

img1 = cv2.imread('6.jpeg') 通过cv2模块把图片读取到img1中,需要指明图片的路径,因为图片与代码在同一目录,因此可以不写路径。

gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) 将图片修改为灰度图像输出到gray,使用灰度图像识别速度会快一些,如果不使用灰度图像也可以。

face_detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") 导入正面人脸检测的级联分类器,若自己有训练好的人脸识别文件也可以将此xml替换。替换成其他文件也可用时识别其他内容,不仅仅局限与人脸。

faces = face_detector.detectMultiScale(gray, 1.1, 3,cv2.CASCADE_SCALE_IMAGE,(50,50),(100,100)) 进行人脸识别;gray是传入的灰度图片,也可以用未进行图像转换的img11.1参数可以决定两个不同大小的窗口扫描之间有多大的跳跃,这个参数设置的大,则意味着计算会变快,但如果窗口错过了某个大小的人脸,则可能丢失物体,默认为1.1;默认值为3表明至少有3次重叠检测,我们才认为人脸确实存;cv2.CV_HAAR_SCALE_IMAGE   按比例检测;(50,50) 寻找人脸的最小区域;(100,100)寻找人脸的最大区域。

for (x, y, w, h) in faces:
    cv2.rectangle(img1, (x, y), (x + w, y + w), (0, 255, 0),2)  
读取人脸识别的位置与响应的区域大小,并画出来。rectangle为画矩形;画在img1图片中;(x, y)矩形起点坐标;(x + w, y + w)矩形终点坐标;(0, 255, 0) RGB;2为线条粗细。

cv2.imshow("img",img1) 显示画好矩形的人脸识别图片。

cv2.waitKey(0) 等待按键,没有此行图片会一闪而过。

文件路径:需要的文件在同一目录中。

 识别的关键函数与相关参数,可通过调节参数减小识别误差:

detectMultiScale(const Mat& image, double scaleFactor=1.1,int minNeighbors, int flag,minSize, maxSize)

1.image为输入的图像。

2.scaleFactor:  其原理是系统会以不同的区块大小对图片进行扫描,再进行特征对比。参数无特别需求,一般设置为1.1。

3.minNeighbors  此为控制误检率参数,默认值为3。

4.flag此参数设置检测模式,可取值如下:

cv2.CV_HAAR_SCALE_IMAGE   按比例检测

cv2.CV_HAAR_DO_CANNY_PRUNING  利用Canny 边缘检测器排除一些边缘很少或很多的图像区域

cv2.CV_HAAR_FIND_BIGGEST_OBJECT   只检测最大物体

cv2.CV_HAAR_DO_ROUGH_SEARCH  只做初步检测。

5.minSize  设置最小的识别区块。

6.maxSize  设置最大的识别区块,低于minSize和高于maxSize的话就不会检测出来。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值