如何使用 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 算法将人脸检测为感兴趣区域并将其裁剪到矩形框?的主要内容,如果未能解决你的问题,请参考以下文章