我同时使用了两个haarcascade算法(正面和轮廓)来改善人脸检测。
我发现我需要使用cv2.GroupRectangles(rectList, groupThreshold)
,但它不起作用。程序返回以下信息:
具有多个元素的数组的真实值是模棱两可的。采用 a.any()或a.all()
如何将其集成到我的代码中?
import cv2
image=cv2.imread("/home/pi/Downloads/test.jpg")
face_cascade=cv2.CascadeClassifier("Path of first algorithm")
profil_cascade=cv2.CascadeClassifier("Path of second algorithm")
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
face=face_cascade.detectMultiScale(gray, 1.06, 5)
profil=profil_cascade.detectMultiScale(gray, 1.1, 5)
cv2.groupRectangles(face and profil, 2)
print("I've found "+str(len(face)+len(profil))+ " face(s)")
for (x,y,w,h) in face:
cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
for (x,y,w,h) in profil:
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imwrite("/home/pi/Download/result.jpg", image)
先谢谢您,祝您愉快:)
答案 0 :(得分:0)
cv2.groupRectangles()
期望将list
作为参数传递。
在您的情况下,face
和profil
是array
类型的。因此,当您执行and
操作时,肯定会引发上述错误。解决方法如下:
将两个数组逐列追加:
combined_array = np.append(face, profil, axis = 0)
将此数组转换为列表:
combined_list = combined_array.tolist()
现在将此列表传递给cv2.GroupRectangles()
:
result = cv2.groupRectangles(combined_list, groupThreshold)
在检查result
时,它实际上是一个包含两个值的tuple
: