[英]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]
在这里,我们正在做以下事情:
areas
的索引,存储在i_biggest
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.