簡體   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