• Python OpenCV 人脸识别


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

    我们先看效果及代码:

     

    1. import cv2
    2. img1 = cv2.imread('6.jpeg')
    3. gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    4. face_detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    5. faces = face_detector.detectMultiScale(gray, 1.1, 3,cv2.CASCADE_SCALE_IMAGE,(50,50),(100,100))
    6. for (x, y, w, h) in faces:
    7. cv2.rectangle(img1, (x, y), (x + w, y + w), (0, 255, 0),2)
    8. cv2.imshow("img",img1)
    9. 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的话就不会检测出来。 

  • 相关阅读:
    运维面试必问的中间件高频面试题
    GD32F30x系列Systick系统滴答定时器 (Qt模拟项目 可套函数模板)
    LIO-SAM中的mapOptmization
    Java 18 新功能:默认编码为 UTF-8
    常见开发、测试模型
    初识javaweb2 tomcat
    2022年高教社杯国赛C题思路 : 古代玻璃制品的成分分析与鉴别
    观测云产品更新 | 优化 SSO 管理、新增监控器类型、优化场景等
    业务定制型异地多活架构设计
    任意版本JLink驱动官方下载详解
  • 原文地址:https://blog.csdn.net/qq_41133610/article/details/126300394