目录

 

一、安装opencv-python

二、准备分类器

三、代码讲解

四、运行结果

附录:

总结


一、安装opencv-python

这里推荐使用pycharm直接安装opencv-python

打开文件——设置——python解释器——点击+号

 搜索opencv-python,点击安装包,等待片刻即可安装好

 检查是否安装好,新建一个项目输入以下代码,若无报错则安装好

import cv2

二、准备分类器

咱们使用opencv官方提供的分类器,包括面部识别,侧脸识别,眼睛识别等,如果想训练自己的分类器可以看我另外一篇文章。

我下载好的三个分类器,老铁们自取

链接:https://pan.baidu.com/s/1TqunSL6ne0dXW5TyO7DGWw 
提取码:9420​​​​​​​

三、代码讲解

准备好以上工作,开始进行操作过程

import cv2                                      

camera = cv2.VideoCapture(0)                    
face_casecade = cv2.CascadeClassifier(r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\xml\cascade.xml')

        导入cv2包。

        cv2.VideoCapture(0)打开摄像头,0表示笔记本内置摄像头

        cv2.CascadeClassifier()加载分类器,括号里面写入刚才下载的分类器的路径,注意:要英文路径,且前面加上r,否则\表示转义符号。

while (True):             
    ret, frame = camera.read()      

        进入一个while循环,camera.read()读取一帧图像,frame为读取到的图片,ret为bool变量要么true,要么flase,当读取到图像则为true

    if ret:
        gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
        face = face_casecade.detectMultiScale(gray_img, 1.3, 2)

        ret为true时进入if判断,cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)表示把读取到的一帧图片frame转换为灰度图。face=face_casecade.detectMultiScale()第一个参数是转换完的灰度图。第二个参数是每次缩小图像的比例,默认1:1。第三个参数是匹配成功所需要的周围矩形框的数目,每一个特征匹配到的区域都是一个矩形框,只有多个矩形框同时存在时,才认为是匹配成功,比如人脸,这个默认值是3。

        for (x, y, w, h) in face:       
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
            print("(x:",(x+w)/2,",y:",(y+h)/2,")")
            cv2.imshow("camera",frame);

        进入for循环,cv2.rectangle()在图上绘制矩形,第一个参数为读取到的图片,第二个参数为左上点的坐标,第二个参数是右下点的坐标,第三个参数是RGB值,第四个参数是矩形边框厚度。

cv2.imshow("camera",frame)将画面展示出来。

       if cv2.waitKey(1) & 0xff == ord('q'):                
               break

如果键盘输入q则退出死循环,ord()是吧q转换为ASCALL码

camera.release()                             
cv2.destroyAllWindows()

关闭窗口和摄像头

四、运行结果

附录:

import cv2                            

camera = cv2.VideoCapture(0)               
face_casecade = cv2.CascadeClassifier(r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\xml\cascade.xml')
while (True):       
    ret, frame = camera.read()           
    if ret:
        gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)   
        face = face_casecade.detectMultiScale(gray_img, 1.3, 2) 
        for (x, y, w, h) in face:
           
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
            print("(x:",(x+w)/2,",y:",(y+h)/2,")")
            cv2.imshow("camera",frame);  
        if cv2.waitKey(1) & 0xff == ord('q'): 
            break
camera.release()                             
cv2.destroyAllWindows()

总结

新人博主,若有错误之处请指出。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐