images/blog-posts

影像处理・目标检测

返回教程主页

上篇 影像处理・网络摄像头

在成功调用摄像头并获取视频内容后,我们可以对视频内容进行目标检测,为了方便上手,这里采用OpenCV人脸检测作为作为实例学习。

我们需要下载OpenCV官方已经训练好的人脸检测器数据文件:

https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_alt.xml

创建检测器

创建一个检测器并载入下载的检测器数据:

face_cascade_data = 'haarcascade_frontalface_alt.xml'
face_cascade = cv.CascadeClassifier()
face_cascade.load(cv.samples.findFile(face_cascade_data))

传入函数cv.samples.findFile的参数是我们下载好的检测器数据文件的路径。

检测与标记

我们创建一个函数用于处理目标检测,并将检测结果标记描绘到图像上:

def face_detect(frame):
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    gray = cv.equalizeHist(gray)
    faces = face_cascade.detectMultiScale(gray)
    for x, y, w, h in faces:
        cv.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 3)

在将图像放入检测器前,我们可以将图像转换成灰度图cv.cvtColor(frame, cv.COLOR_BGR2GRAY);有时为了提升效果可以对图像进行色彩均衡化操作cv.equalizeHist(gray);使用face_cascade.detectMultiScale方法进行检测,可以使用for in循环遍历取出每一个检测到的人脸位置信息。

结合摄像头调用

我们可以在之前的摄像头调用实例代码中应用人脸检测:

import cv2 as cv

def face_detect(frame):
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    gray = cv.equalizeHist(gray)
    faces = face_cascade.detectMultiScale(gray)
    for x, y, w, h in faces:
        cv.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 3)

face_cascade_data = 'haarcascade_frontalface_alt.xml'
face_cascade = cv.CascadeClassifier()
face_cascade.load(cv.samples.findFile(face_cascade_data))

video = cv.VideoCapture(0)
while video.isOpened():
    ret, frame = video.read()
    if ret == True:
        face_detect(frame)
        cv.imshow('My Video', frame[:, ::-1])
        if cv.waitKey(20) & 0xFF == ord('q'):
            break
    else:
        break
video.release()
cv.destroyAllWindows()

下篇 影像处理・人脸识别

SUBSCRIBE


🔒 No spam. Unsubscribe any time.

About kk

kk

Vincenzo Antedoro is an engineer who helps those who want to invest in renewables. For the rest he enjoys teaching with the method of learning by doing..

» More about kk