opencv实战—目标跟踪-KCF目标跟踪方法

一.函数

1.vars ()

vars() 函数返回对象object的属性和属性值的字典对象。

2 .tracker = cv2.multiTracker_create() 获得追踪的初始化结果
3. continue 语句跳出本次循环,而break跳出整个循环。
  • cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)

  • 参数解释:
    InputArray src 输入图片
    OutputArray dst 输出图片
    Size 输出图片尺寸
    fx, fy 沿x轴,y轴的缩放系数
    interpolation 插入方式

  • interpolation 选项所用的插值方法:
    最近邻插值 INTER_NEAREST
    双线性插值(默认设置)INTER_LINEAR
    使用像素区域关系进行重采样 INTER_AREA
    4x4像素邻域的双三次插值 INTER_CUBIC
    8x8像素邻域的Lanczos插值 INTER_LANCZOS4

4.[int(i) for i in range()]
#例子
[int(i) for i in range(10)]
>>>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5. selectROI
selectROI(windowName, img, showCrosshair=None, fromCenter=None):
    .   参数windowName:选择的区域被显示在的窗口的名字
    .   参数img:要在什么图片上选择ROI
    .   参数showCrosshair:是否在矩形框里画十字线.
    .   参数fromCenter:是否是从矩形框的中心开始画
import argparse
import cv2
import time

# 第一步进行参数设置
ap = argparse.ArgumentParser()
ap.add_argument('-v', '--video', type=str, default='videos/soccer_01.mp4',
                help='path to input video file')
ap.add_argument('-t', '--tracker', type=str,
                default='kcf', help='Opencv object tracker type')

args = vars(ap.parse_args())


# opencv已经实现的追踪算法
# 第二步:构造cv2已有追踪算法的列表
OPENCV_OBJECT_TRACKERS = {
    "csrt": cv2.TrackerCSRT_create,
    "kcf": cv2.TrackerKCF_create,
    "boosting": cv2.TrackerBoosting_create,
    "mil": cv2.TrackerMIL_create,
    "tld": cv2.TrackerTLD_create,
    "medianflow": cv2.TrackerMedianFlow_create,
    "mosse": cv2.TrackerMOSSE_create
}

# 第三步:实例化追踪器
# 实例化Opencv's multi-object tracker
trackers = cv2.MultiTracker_create()

# 第四步:使用cv2.VideoCapture读取视频
vs = cv2.VideoCapture(args['video'])

while True:
    # 第五步:读入第一张图片
    frame = vs.read()
    frame = frame[1]
    # 到头了就结束
    if frame is None:
        break

    # 第六步:使用cv2.resize对图像进行长宽的放缩操作
    h, w = frame.shape[:2]
    width = 600
    r = width / float(w)
    dim = (width, int(r * h))
    frame = cv2.resize(frame, dim, cv2.INTER_AREA)

    # 第七步:使用trackers.apply获得矩形框
    (success, boxes) = trackers.update(frame)

    # 第八步:循环多组矩形框,进行画图操作
    for box in boxes:
        (x, y, w, h) = [int(v) for v in box]
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 第九步:进行图像展示
    cv2.imshow('Frame', frame)

    # 第十步:判断按键,如果是s的话,进行画出新的box
    key = cv2.waitKey(100) & 0xff

    if key == ord('s'):
        # 第十一步:选择一个区域,按s键,并将tracker追踪器,frame和box传入到trackers中
        box = cv2.selectROI('Frame', frame, fromCenter=False,
                            showCrosshair=True)
        tracker = OPENCV_OBJECT_TRACKERS[args['tracker']]()
        trackers.add(tracker, frame, box)

    elif key == 27:
        break


vs.release()
cv2.destroyAllWindows()

你可能感兴趣的:(python,机器学习)