我是opencv和python的新手,正在尝试收集图像中人脸的关键点和描述符.
我使用带有正面人脸模板的HAAR级联分类器来查找图像中的人脸. HAAR级联为我提供了标记图像中人脸的坐标列表.我想在这些坐标处生成一个“蒙版”,以便可以使用cv2.surf()提取蒙版区域内的关键点和描述符.
我不知道如何制作那个面具.
尝试以this photo为例进行处理.
这是到目前为止的代码:
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)
之后,我想使用faceRegions用面膜进行SURF提取.假设faceRegions看起来像这样:
array([[488, 163, 91, 91],
[357, 184, 93, 93],
[154, 78, 107, 107]], dtype=int32)
在imgg中发现了三个面,因此我想在其特定位置创建三个单独的蒙版,并分别设置其特定的宽度和高度.然后让cv2.surf()只在蒙版区域中查看.我怎样才能做到这一点?
解决方法:
您获得的faceRegions表示面孔的x,y,宽度,高度.因此,您可以简单地用这些坐标设置ROI(感兴趣区域),然后将该矩形作为图像发送到您的SURF函数.
例如:
face1 = imgg[y:y+height, x:x+width]
现在,您可以将此face1传递给cv2.SURF()而不是传递完整图像.