如何在OpenCV Haar classifi中显示最大矩形

2024-03-29 04:44:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

输出图像

enter image description here

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

编码

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()

Tags: 文件对象图像类型imgxmlcarcars
2条回答

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

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.detectMultiScaledocumentation表示:

Detects objects of different sizes in the input image

另请参阅文档:

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

minSize – Minimum possible object size. Objects smaller than that are ignored.

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

相关问题 更多 >