如何解决openCV是否需要所有8种对象跟踪算法和初始ROI?
我正在一个项目中,我必须检测在铁路(小型火车)上行驶的彩色汽车。
为了进行检测,我使用直方图pack_projection获得了包含汽车斑点的二进制图像。然后绘制边界框非常简单。但是,由于这是一次检测,意味着在每个检测到的帧中都检测到汽车,因此我想尝试跟踪汽车,从而提高性能并跟踪汽车ID(这意味着如果现在正在追踪红色汽车)并且当汽车返回图像时,汽车又从图像中离开,并且经常从另一个地方离开时,算法必须通过指示这是红色汽车来跟踪汽车。
您知道,开放式CV中有8种对象跟踪方法,其代码如下:
import cv2
import sys
(major_ver,minor_ver,subminor_ver) = (cv2.__version__).split('.')
if __name__ == '__main__' :
# Set up tracker.
# Instead of MIL,you can also use
tracker_types = ['BOOSTING','MIL','KCF','TLD','MEDIANFLOW','GOTURN','MOSSE','CSRT']
tracker_type = tracker_types[2]
if int(minor_ver) < 3:
tracker = cv2.Tracker_create(tracker_type)
else:
if tracker_type == 'BOOSTING':
tracker = cv2.TrackerBoosting_create()
if tracker_type == 'MIL':
tracker = cv2.TrackerMIL_create()
if tracker_type == 'KCF':
tracker = cv2.TrackerKCF_create()
if tracker_type == 'TLD':
tracker = cv2.TrackerTLD_create()
if tracker_type == 'MEDIANFLOW':
tracker = cv2.TrackerMedianFlow_create()
if tracker_type == 'GOTURN':
tracker = cv2.TrackerGOTURN_create()
if tracker_type == 'MOSSE':
tracker = cv2.TrackerMOSSE_create()
if tracker_type == "CSRT":
tracker = cv2.TrackerCSRT_create()
# Read video
video = cv2.VideoCapture("videos/chaplin.mp4")
# Exit if video not opened.
if not video.isOpened():
print "Could not open video"
sys.exit()
# Read first frame.
ok,frame = video.read()
if not ok:
print 'Cannot read video file'
sys.exit()
# Define an initial bounding box
bbox = (287,23,86,320)
# Uncomment the line below to select a different bounding box
bbox = cv2.selectROI(frame,False)
# Initialize tracker with first frame and bounding box
ok = tracker.init(frame,bbox)
while True:
# Read a new frame
ok,frame = video.read()
if not ok:
break
# Start timer
timer = cv2.getTickCount()
# Update tracker
ok,bbox = tracker.update(frame)
# Calculate Frames per second (FPS)
fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
# Draw bounding box
if ok:
# Tracking success
p1 = (int(bbox[0]),int(bbox[1]))
p2 = (int(bbox[0] + bbox[2]),int(bbox[1] + bbox[3]))
cv2.rectangle(frame,p1,p2,(255,0),2,1)
else :
# Tracking failure
cv2.putText(frame,"Tracking failure detected",(100,80),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,255),2)
# Display tracker type on frame
cv2.putText(frame,tracker_type + " Tracker",20),(50,170,50),2);
# Display FPS on frame
cv2.putText(frame,"FPS : " + str(int(fps)),2);
# Display result
cv2.imshow("Tracking",frame)
# Exit if ESC pressed
k = cv2.waitKey(1) & 0xff
if k == 27 : break
我的问题是: 1-我如何使上述跟踪器之一检测到进入框架的特定汽车,而无需使用鼠标或通过静态像素位置选择ROI点 换句话说,如果上面的跟踪器之一退出框架并在一段时间后重新进入,谁能定向这些跟踪器?
预先感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。