首页 > 解决方案 > 如何在 OpenCV Haar 分类器中显示最大的矩形

问题描述

我已经使用 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()

标签: pythonopencvimage-processingcomputer-visionobject-detection

解决方案


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

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

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

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

推荐阅读