【发布时间】:2021-01-16 10:58:19
【问题描述】:
我想检查是否检测到人脸。
我有变量face_detect,当检测到人脸时,我想将此变量转换为True,但是我不知道如何检查检测到的人脸。我尝试使用faces.size() 来检查它是否大于零,但它说
AttributeError: 'tuple' 对象没有属性 'size'
所以我不知道为什么这不起作用。
import cv2
import numpy as np
import winsound
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
face_detect = False
while 1:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
【问题讨论】:
-
detectMultiScale应该返回一个列表,而不是一个元组,所以我不明白你是如何得到这个错误的。在任何情况下,您都可以使用len(detectMultiScale)获取列表的长度,而空列表的行为类似于False,因此您甚至可能不需要它。
标签: python opencv detection cv2