opencv和python:如何在掩码中使用cv2.surf()

我是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()而不是传递完整图像.

上一篇:如何使用SURF功能(Python OpenCV)匹配和对齐两个图像?


下一篇:android-使用imread OpenCV读取图像时出错