我如何计算每一帧中的边界框?
How I can count bounding boxes in each frame?
我需要知道如何计算每帧中的边界框?
我需要知道边界框的总数,所以我知道什么时候需要添加新对象进行跟踪,什么时候total bounding boxes in current frame > total bounding boxes in previous frame
我已经尝试将质心坐标 (cx,cy) 存储到列表中:
import cv2
import numpy as np
bgsMOG = cv2.BackgroundSubtractorMOG(50,3,0.8)
cap = cv2.VideoCapture("d:\MOV_5702.avi")
a = []
if cap:
while True:
ret, frame = cap.read()
if ret:
fgmask = bgsMOG.apply(frame, None, 0.99)
contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame,contours,-1,(0,255,0),cv2.cv.CV_FILLED,32)
try: hierarchy = hierarchy[0]
except: hierarchy = []
for contour, hier in zip(contours, hierarchy):
(x,y,w,h) = cv2.boundingRect(contour)
if w > 20 and h > 20:
cv2.rectangle(frame, (x,y), (x+w,y+h), (180,0,0), 1)
(x,y,w,h) = cv2.boundingRect(contour)
x1=w/2
y1=h/2
cx=x+x1
cy=y+y1
a.append([cx,cy])
print(len(a))
a=[]
cv2.imshow('BGS', fgmask)
cv2.imshow('Ori+Bounding Box',frame)
key = cv2.waitKey(100)
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
但结果总是 1..
在您的代码中,您有
a.append([cx,cy])
print(len(a))
a=[]
因为这是循环运行的,所以 a
总是会在添加一项后重置为空列表(因此 len(a)
将始终是 1
)。
尝试将 a=[]
拉出 for
循环,使其每帧只发生一次,而不是每个轮廓发生一次,它应该能更好地指示边界框的数量在每一帧中。
我需要知道如何计算每帧中的边界框?
我需要知道边界框的总数,所以我知道什么时候需要添加新对象进行跟踪,什么时候total bounding boxes in current frame > total bounding boxes in previous frame
我已经尝试将质心坐标 (cx,cy) 存储到列表中:
import cv2
import numpy as np
bgsMOG = cv2.BackgroundSubtractorMOG(50,3,0.8)
cap = cv2.VideoCapture("d:\MOV_5702.avi")
a = []
if cap:
while True:
ret, frame = cap.read()
if ret:
fgmask = bgsMOG.apply(frame, None, 0.99)
contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame,contours,-1,(0,255,0),cv2.cv.CV_FILLED,32)
try: hierarchy = hierarchy[0]
except: hierarchy = []
for contour, hier in zip(contours, hierarchy):
(x,y,w,h) = cv2.boundingRect(contour)
if w > 20 and h > 20:
cv2.rectangle(frame, (x,y), (x+w,y+h), (180,0,0), 1)
(x,y,w,h) = cv2.boundingRect(contour)
x1=w/2
y1=h/2
cx=x+x1
cy=y+y1
a.append([cx,cy])
print(len(a))
a=[]
cv2.imshow('BGS', fgmask)
cv2.imshow('Ori+Bounding Box',frame)
key = cv2.waitKey(100)
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
但结果总是 1..
在您的代码中,您有
a.append([cx,cy])
print(len(a))
a=[]
因为这是循环运行的,所以 a
总是会在添加一项后重置为空列表(因此 len(a)
将始终是 1
)。
尝试将 a=[]
拉出 for
循环,使其每帧只发生一次,而不是每个轮廓发生一次,它应该能更好地指示边界框的数量在每一帧中。