如何在 OpenCV Haar 分类器中显示最大的矩形

jam*_*yce 3 python opencv image-processing object-detection computer-vision

我已经使用 haar 级联对象检测在汽车的侧视图上训练了正面和负面图像,现在当我使用级联 xml 文件来预测图像中的汽车时,我得到了多个矩形。

现在
1)为什么我的对象周围有多个矩形。
2)如何只显示图像中检测到的最大矩形

输出图像

在此处输入图片说明

这是我在每个图像上得到的输出类型

代码

car_cascade = cv2.CascadeClassifier('data/cascade.xml')
img = cv2.imread('test/46.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in cars:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)    

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 5

Piglet 的回答将帮助您设置最小/最大尺寸的阈值,但如果您想找到图像中最大的边界框,您可以执行以下操作:

areas = [w*h for x,y,w,h in cars]
i_biggest = np.argmax(areas)
biggest = cars[i_biggest]
Run Code Online (Sandbox Code Playgroud)

在这里,我们正在执行以下操作:

  1. 使用列表理解计算所有边界框区域
  2. 找到areas具有最大值的索引,存储在i_biggest
  3. 使用此索引从中提取最大(最大面积)的矩形 cars