我有一個代碼,它使用 haar 級聯汽車模型檢測汽車,在檢測到的汽車周圍繪制矩形,并生成一個視頻檔案。我正在嘗試更新代碼以顯示每幀中檢測到的汽車數量。
cap = cv2.VideoCapture(video_src)
car_cascade = cv2.CascadeClassifier(cascade_src)
video = cv2.VideoWriter('result.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, (450,250))
while True:
ret, img = cap.read()
if ret is False:
break
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.1, 2)
cnt=0
for (x,y,w,h) in cars:
cv2.rectangle(img,(x,y),(x w,y h),(0,255,255),2)
cv2.putText(img, str(cnt), (10,200), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 255, 0), 2, cv2.LINE_AA)
cnt = 1
cv2_imshow(img)
img=cv2.resize(img,(450,250))
video.write(img)
video.release()
cap.release()
當我執行此操作時,某些幀的數字相互重疊。我只想在每一幀上寫一個計數。

不知道為什么會這樣,但我嘗試設定延遲計時器并調整視頻寫入幀速度,但沒有運氣。我不知道這種使用 cnt 計算汽車的方法是否準確,但如果有人知道如何解決數字重疊問題或建議一種更好的方法來計算每幀中識別的汽車總數,那就太好了。
uj5u.com熱心網友回復:
我認為您遇到的問題是,對于每輛檢測到的汽車,您都會呼叫該函式cv2.putText(img, str(cnt), (10,200), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 255, 0), 2, cv2.LINE_AA),并且它會為每輛汽車繪制不同的數字。而不是這樣做,您應該將該行放在 for 回圈之外。
cap = cv2.VideoCapture(video_src)
car_cascade = cv2.CascadeClassifier(cascade_src)
video = cv2.VideoWriter('result.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, (450,250))
while True:
ret, img = cap.read()
if ret is False:
break
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.1, 2)
for (x,y,w,h) in cars:
cv2.rectangle(img,(x,y),(x w,y h),(0,255,255),2)
cv2_imshow(img)
cv2.putText(img, str(len(cars)), (10,200), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 255, 0), 2, cv2.LINE_AA)
img=cv2.resize(img,(450,250))
video.write(img)
video.release()
cap.release()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/486909.html
