3

我是 opencv 和 python 的新手,正在尝试收集图像中人脸的关键点和描述符。

我正在使用带有正面人脸模板的 HAAR 级联分类器来查找图像中的人脸。HAAR 级联为我提供了一个坐标列表,用于标记图像中的人脸。我想在这些坐标处生成一个“掩码”,以便我可以cv2.surf()用来提取掩码区域内的关键点和描述符。

我不知道如何创建那个面具。

尝试以这张照片为例进行处理。

这是到目前为止的代码:

import cv2
import numpy as np

# Load image and convert to grayscale
img = cv2.imread('testPhoto.jpg')
imgg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Look for faces in the image
cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
faceRegions = cascade.detectMultiScale(imgg)

在此之后,我想使用掩码进行 SURF 提取faceRegions。假设faceRegions看起来像这样:

array([[488, 163,  91,  91],
       [357, 184,  93,  93],
       [154,  78, 107, 107]], dtype=int32)

在其中找到了三个面,imgg所以我想在它们的特定位置创建三个具有特定宽度和高度的单独蒙版。然后cv2.surf()只看蒙面区域。我怎样才能做到这一点?

4

1 回答 1

4

faceRegions你得到的表示面孔x,y,width,height。因此,您可以简单地使用这些坐标设置一个 ROI(感兴趣区域),并将该矩形作为图像发送到您的 SURF 函数。

例如:

face1 = imgg[y:y+height, x:x+width]

现在您可以将其传递face1给 cv2.SURF() 而不是传递完整图像。

于 2013-05-30T04:54:25.190 回答