一个微小的例子,检测摄像头中出现的人脸并框出来。

环境部署

sudo apt-get install python-opencv

在Opencv的项目上下载用于检测人脸的级联:

https://github.com/opencv/opencv/blob/master/data/haarcascades/
下载 haarcascade_frontalface_default.xml
(这里面还有用于检测其他的级联文件,比如眼睛)

一个示例

人脸识别中找人脸很重要,只有检测到人脸,再进行算法比对数据库中的人脸。

#coding=utf-8
import cv2
#加载级联文件,返回一个级联分类器
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#打开摄像头
camera = cv2.VideoCapture(0)
while True:
    #读一帧
    ret, frame = camera.read()
    #转为灰度图,人脸检测需要灰度图
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    #人脸检测,返回坐标
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    #参数:gray 灰度图像 scaleFactor 检测过程中每次迭代时图像的压缩率 minNeighbors 每个人脸矩形保留近邻数目的最小值
    for (x,y,w,h) in faces:
        #在原图像上画矩形
        cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
    #将其显示出来
    cv2.imshow("camera", frame)
    if cv2.waitKey(1000 / 12) & 0xff == ord("q"):
        break
#关闭摄像头,销毁所有窗口
camera.release()
cv2.destroyAllWindows()

测试结果

2019-02-13-200940_1920x1080_scrot.png

性能

不得不说的是C++的性能比Python快至少一半,但我觉得由于现在计算机性能并不像以前那么弱,所以C++与Python没有什么区别,当然,像嵌入式设备这种性能不强的还是用C++比较好。

标签: Python, OpenCV

添加新评论