zoukankan      html  css  js  c++  java
  • 【图像处理】使用OpenCV实现人脸和行人检测

      OpenCV全称是Open source Computer Vision Library(开放源代码计算机视觉库),是一个用于图像处理、分析、机器视觉方面的开源函数库,提供了很多图像处理的工具和可以直接使用的API接口。
      OpenCV自带了函数detectMultiScale()可以实现对行人和人脸的检测,实现简单,但识别效果相对较差。

    行人检测

      在行人检测上,OpenCV采用的是HOG(特征检测算法)+SVM算法。

    import cv2
    
    def is_inside(o,i):
        ox,oy,ow,oh = o
        ix,iy,iw,ih = i
        return ox>ix and oy>iy and ox+ow<ix+iw and oy+oh<iy+ih
    
    def draw_person(image,person):
        x,y,w,h=person
        cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2)
    
    # 使用opencv的hog特征进行行人检测
    img = cv2.imread("test.jpg")
    hog = cv2.HOGDescriptor()
    hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
    
    found, w = hog.detectMultiScale(img)
    
    print(found,w)
    foundList = []
    for ri,r in enumerate(found):
        flag = 0
        for qi,q in enumerate(found):
            if ri != qi and is_inside(r,q):
                flag = 1
        if(flag == 0):
            foundList.append(r)
    
    for person in foundList:
        draw_person(img,person)
    cv2.imwrite("./test1.jpg",img)
    

      检测效果如下:

    ![](https://img2018.cnblogs.com/blog/1608161/201904/1608161-20190413202629374-1825910823.jpg)

    人脸检测

      在人脸检测上,OpenCV采用的是Harr特征,Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。

    import cv2
    
    # 使用人脸识别分类器
    classfier = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
    
    # 读取图片
    image = cv2.imread("face.jpg")
    # 转为灰度图
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    
    faces = classfier.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(3,3))
    print("发现{0}个人脸!".format(len(faces)))
    
    for faceRect in faces:
        x,y,w,h=faceRect
        cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
    cv2.imwrite("./face1.jpg",image)
    

      检测效果如下:

    博学 审问 慎思 明辨 笃行
  • 相关阅读:
    转:同步、异步、阻塞和非阻塞
    转:回调函数
    转:同步/异步与阻塞/非阻塞的区别
    转:Socket在阻塞模式下的信息收发和文件接收
    转:直接用socket实现HTTP协议
    链接错误 LINK : fatal error LNK1104: 无法打开文件“XX.obj”
    转:MFC中常用类,宏,函数介绍
    转:线程同步技术剖析
    转:线程同步
    转:C++回调函数用法
  • 原文地址:https://www.cnblogs.com/gzshan/p/10702752.html
Copyright © 2011-2022 走看看