Python 如何从同一图像中检测多个人脸?

Python 如何从同一图像中检测多个人脸?,python,opencv,crop,face-detection,viola-jones,Python,Opencv,Crop,Face Detection,Viola Jones,我试图使用python和opencv从同一个图像中裁剪多个面,但它显示了一个错误。 如果有其他方法,请告诉我。 下面是代码和错误 import cv2 # Load some pre-trained data on face frontals from opencv (haar cascade algorithm) trained_face_data = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # Choose

我试图使用python和opencv从同一个图像中裁剪多个面,但它显示了一个错误。 如果有其他方法,请告诉我。 下面是代码和错误

import cv2

# Load some pre-trained data on face frontals from opencv (haar cascade algorithm)
trained_face_data = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# Choose an image to detect faces in
img = cv2.imread('mask.png')
    
# Must convert to greyscale
grayscaled_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
# Detect Faces 
face_coordinates = trained_face_data.detectMultiScale(grayscaled_img)

img_crop = []

# Draw rectangles around the faces
for (x, y, w, h) in face_coordinates:
    cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 0), 2)
    img_crop.append(img[y:y+h, x:x+w])

    
cv2.imshow('Cropped', img_crop)

cv2.waitKey()

**类型错误**回溯(最近一次调用)
在里面
32[在此处输入图像描述][1]
33
--->34 cv2.imshow(“已修剪”,img_作物)
35#cv2.imshow(“作物”,img#U crop2)
36#cv2.imshow(“人脸检测器”,img)
TypeError:此处参数“mat”应为Ptr

将所有图像存储在列表中后,一种解决方案是:

一次显示一个图像

对于img_作物中的作物:
cv2.imshow(“裁剪”,裁剪)
cv2.等待键(0)
假设您的输入图像:

结果:

如果要保存它们,可以执行以下操作:

对于计数器,在枚举中裁剪(img_裁剪):
cv2.imshow(“裁剪”,裁剪)
imwrite(“pose_result_{}.png.”格式(计数器),裁剪)
cv2.等待键(0)
代码:

导入cv2
将numpy作为np导入
#从opencv(haar cascade算法)加载一些预先训练的人脸正面数据
trained_face_data=cv2.CascadeClassifier('haarcascade_frontalface_default.xml'))
#选择要在中检测面的图像
img=cv2.imread('mask.png')
#必须转换为灰度
灰度\u img=cv2.CVT颜色(img,cv2.COLOR\u bgr2灰色)
#检测人脸
面坐标=经过训练的面数据。检测多尺度(灰度图像)
img_作物=[]
#围绕面绘制矩形
对于面_坐标中的(x,y,w,h):
cv2.矩形(img,(x,y),(x+w,y+h),(0255,0),2)
img_crop.append(img[y:y+h,x:x+w])
对于计数器,在枚举中裁剪(img_裁剪):
cv2.imshow(“裁剪”,裁剪)
imwrite(“pose_result_{}.png.”格式(计数器),裁剪)
cv2.等待键(0)

您正在使用图像列表(
img\u crop
)调用
imshow
),但它需要一个图像。在打开的单个窗口中,您一次只能显示一张图片,因此,您可以对进行循环img\u裁剪
**TypeError**                                 Traceback (most recent call last)
<ipython-input-4-7c85402c34e9> in <module>
     32 [enter image description here][1]
     33 
---> 34 cv2.imshow('Cropped', img_crop)
     35 #cv2.imshow('crop', img_crop2)
     36 #cv2.imshow('Face Detector',  img)

TypeError: Expected Ptr<cv::UMat> for argument 'mat'e here