【圖像處理】使用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)

  檢測效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM