如何在OpenCV中合并重叠的矩形? (蟒蛇)

时间:2018-07-12 18:23:14

标签: opencv computer-vision

我同时使用了两个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)

先谢谢您,祝您愉快:)

1 个答案:

答案 0 :(得分:0)

cv2.groupRectangles()期望将list作为参数传递。

在您的情况下,faceprofilarray类型的。因此,当您执行and操作时,肯定会引发上述错误。解决方法如下:

将两个数组逐列追加:

combined_array = np.append(face, profil, axis = 0)

将此数组转换为列表:

combined_list = combined_array.tolist()

现在将此列表传递给cv2.GroupRectangles()

result = cv2.groupRectangles(combined_list, groupThreshold) 

在检查result时,它实际上是一个包含两个值的tuple

  • 矩形坐标数组
  • 矩形的权重(表示成组矩形的可能性)