python - 如何在 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()
解决方案
Piglet 的回答将帮助您设置最小/最大尺寸的阈值,但如果您想在图像中找到最大的边界框,您可以执行以下操作:
areas = [w*h for x,y,w,h in cars]
i_biggest = np.argmax(areas)
biggest = cars[i_biggest]
在这里,我们正在执行以下操作:
- 使用列表推导计算所有边界框区域
- 找到
areas
具有最大值的索引,存储在i_biggest
- 使用此索引从中提取最大(最大面积)的矩形
cars
推荐阅读
- html - 如何在 Fulma/Fable 中插入自定义 HTML 标签?
- python - 如何使我的代码生成相似但仍然不同的结果而不需要全部输入?
- typescript - 为什么泛型的类型变量通常声明为单个字母(例如:
)? - firebase-realtime-database - 如何计算文档数量(onWrite)并通过 Cloud Functions 将计数器保存到特定路径中?
- github - “找不到 .travis.yml”怎么办?
- swift - 无法将时差设置为本地通知的时间间隔
- php - 是否有用于在 php 中清除打印文本的内置函数?
- mercurial - 如何在 TortoiseHG Workbench 中默认状态过滤器?
- java - 如何以相同的方法返回不同的对象?
- r - 是否可以将变量名称动态分配给 magrittr 管道中的向量?