目标追踪之opencv中追踪器的应用(python)

opencv的强大之处想必做过图像处理的人都应该了解,吹一波。今天写了一下python调用opencv追踪器在OTB数据集上的目标追踪。首先,需要注意的是仅安装opencv-python是不够的,还需要其加强包opencv-contrib-python,此时需要注意的是这两个包的版本要相同。

下边是我为OTB50+opencv写的目标追踪的调用程序,大家可以参考一下,其中需要指定采用数据集名称name,图片存放路径path1,追踪标准的路径path2。共支持'BOOSTING', 'MIL','KCF', 'TLD', 'MEDIANFLOW',‘MOOSE’这几种追踪器,修改时更改tracker_type=tracker_types[1]中的序号即可。 'GOTURN'这个跟踪器需要另外的文件支持,下载地址https://github.com/spmallick/goturn-files,将其解压后放在工程目录下即可。

import os
import cv2
import numpy as np
def num_read_directory(directory_name):
    filename1=os.listdir(directory_name)
    return len(filename1)
def read_directory(directory_name,num):
    filename1=os.listdir(directory_name)
    img = cv2.imread(directory_name + "/" + filename1[num],cv2.IMREAD_COLOR)
    return img
if __name__ == '__main__':
    name="Biker"
    path1="H:/tracking/OTB50/"+name+"/img/"
    path2="H:/tracking/OTB50/"+name+"/groundtruth_rect.txt"
    (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
    tracker_types = ['BOOSTING', 'MIL','KCF', 'TLD', 'MEDIANFLOW', 'GOTURN','MOSSE']
    tracker_type=tracker_types[1]
    num_image=num_read_directory(path1)
    print(num_image)
    img=read_directory(path1,0)
    print(img.shape)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter("H:/tracking/OTB50/"+name+"/"+tracker_type+"_out.avi",fourcc, 24, (img.shape[1],img.shape[0]))
    f = open(path2)
    frames=np.zeros([num_image,4])
    j=0
    for i in f:
        frames[j,:]=i.split(',')
        j+=1
        print(i)
    f.close()

    if int(minor_ver) < 3:
        tracker1 = cv2.Tracker_create(tracker_type)
    else:
        if tracker_type == 'BOOSTING':
            tracker1 = cv2.TrackerBoosting_create()
        if tracker_type == 'MIL':
            tracker1 = cv2.TrackerMIL_create()
        if tracker_type == 'KCF':
            tracker1 = cv2.TrackerKCF_create()
        if tracker_type == 'TLD':
            tracker1 = cv2.TrackerTLD_create()
        if tracker_type == 'MEDIANFLOW':
            tracker1 = cv2.TrackerMedianFlow_create()
        if tracker_type == 'GOTURN':
            tracker1 = cv2.TrackerGOTURN_create()
        if tracker_type == 'MOSSE':
            tracker1 = cv2.TrackerGOTURN_create()
    img = read_directory(path1,0)
    img_first=img.copy()
    cv2.rectangle(img_first,(int(frames[0,0]),int(frames[0,1])),(int(frames[0,0]+frames[0,2]),int(frames[0,1]+frames[0,3])),(0,0,255),1)
    #bbox = cv2.selectROI(img_first, False)
    bbox=tuple(frames[0,:])
    tracker1.init(img_first,bbox)
    cv2.namedWindow('image',cv2.WINDOW_AUTOSIZE)
    cv2.imshow('image', img_first)
    for i in range(num_image-1):
        image=read_directory(path1,i+1)
        status,box1_predict = tracker1.update(image)
        cv2.rectangle(image, (int(box1_predict[0]), int(box1_predict[1])),
                      (int(box1_predict[0]+box1_predict[2]), int(box1_predict[1]+box1_predict[3])), (0, 255, 255), 3)
        cv2.rectangle(image,(int(frames[i+1,0]),int(frames[i+1,1])),(int(frames[i+1,0]+frames[i+1,2]),
                                                                         int(frames[i+1,1]+frames[i+1,3])),(0,0,255),3)
        cv2.putText(image, tracker_type, (150, 20), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255, 255), 2)
        cv2.putText(image, "standard", (5, 20), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 2)
        cv2.imshow('image', image)
        out.write(image)
        c = cv2.waitKey(10) & 0xff
        if c == 27: break
    cv2.destroyAllWindows()

下边列出几个追踪效果吧:

在Biker中KCF丢失追踪目标最早,MIL在这四种当中跟踪效果最好。当然这仅仅是对于Biker这个数据来说的。

  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值