如何使用 Viola Jones 算法将人脸检测为感兴趣区域并将其裁剪到矩形框?

Posted

技术标签:

【中文标题】如何使用 Viola Jones 算法将人脸检测为感兴趣区域并将其裁剪到矩形框?【英文标题】:How can i use Viola Jones Algorithm to detect the Face as a region of interest and crop it till the rectangle box? 【发布时间】:2021-12-04 04:04:26 【问题描述】:

我想检测视频帧中的人脸并去除背景等其他元素,只想专注于人脸区域,为此我需要使用 viola jones 算法,czn 任何人都可以给我一个提示或合适的答案。

import cv2
import sys
imagep='6.jpg'#sys.argv[1]
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
i=cv2.imread(imagep)
gray=cv2.imread(imagep,cv2.COLOR_BGR2GRAY)
f=face_cascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(30,30),flags=cv2.CASCADE_SCALE_IMAGE)
print("Found 0 faces!".format(len(f)))
for(x,y,w,h) in f:
  cv2.rectangle(i,(x,y),(x+w,y+h),(0,255,0),2)
  cv2.imshow("Faces found",i)
  cv2.waitKey(0)

【问题讨论】:

【参考方案1】:

获得包含人脸的矩形的左上角和右下角坐标后,您可以根据这些坐标裁剪原始图像。我们假设初始图像存储在 frame 变量中,按照代码进行

face = face_recognition.detectMultiScale(frame, scaleFactor = 1.8, minNeighbors = 5) #detects coordinates of face
resultant_image = frame[face[0][1] : (face[0][1] + face[0][3]),face[0][0] : (face[0][0] + face[0][2]), :] # gives you cropped image

【讨论】:

在 'face_recognition.detectMultiScale()' 部分中,Face_recognition 部分是对象还是导入文件?我编辑了问题以包含我的代码

以上是关于如何使用 Viola Jones 算法将人脸检测为感兴趣区域并将其裁剪到矩形框?的主要内容,如果未能解决你的问题,请参考以下文章

viola jones人脸检测原理

matlab中的人脸检测(viola-jones)

Viola-Jones 人脸检测:像素之间的高对比度

Viola-Jones(人脸检测)

Viola-Jones 的人脸检测声称拥有 18 万个特征

Viola-Jones 人脸检测器如何处理多种尺寸的人脸?