【图像处理】使用OpenCV实现人脸和行人检测

本文介绍了OpenCV在行人和人脸检测的应用,行人检测采用HOG+SVM算法,人脸检测则利用Harr特征。通过Python代码示例展示了如何使用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)

  检测效果如下:


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)

  检测效果如下:


1608161-20190413211249328-1780951417.jpg

转载于:https://www.cnblogs.com/gzshan/p/10702752.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值