繁体   English   中英

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

[英]How to show the biggest rectangle in OpenCV Haar classifier

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

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提取最大(最大区域)矩形

由于函数名称alread建议使用cv2.CascadeClassifier.detectMultiScale文档说:

检测输入图像中不同大小的对象

还来自文档:

Python:cv2.CascadeClassifier.detectMultiScale(image [,scaleFactor [,minNeighbors [,flags [, minSize [,maxSize]]]]])→对象

minSize - 最小可能的对象大小。 小于该值的对象将被忽略。

因此,要么按大小过滤生成的矩形列表,要么通过设置minSize参数来阻止小对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM