资源简介

本程序是基于python+opencv下运用meanshift算法对视频中选中目标进行自动识别跟踪,针对第一帧图像进行了特殊处理,具体请见代码。环境为python2.7+opencv2

资源截图

代码片段和文件信息

# encoding: utf-8
import numpy as np
import cv2
current_pos = None
tl = None
br = None

#鼠标事件
def get_rect(im title=‘img1‘):
    mouse_params = {‘tl‘: None ‘br‘: None ‘current_pos‘: None‘released_once‘: False}

    cv2.namedWindow(title)
    cv2.moveWindow(title 100 0)  #启动后初始窗口的位置

    def onMouse(event x y flags param):
        param[‘current_pos‘] = (x y)

        if param[‘tl‘] is not None and not (flags & cv2.EVENT_FLAG_LBUTTON):
            param[‘released_once‘] = True

        if flags & cv2.EVENT_FLAG_LBUTTON:
            if param[‘tl‘] is None:
                param[‘tl‘] = param[‘current_pos‘]
            elif param[‘released_once‘]:
                param[‘br‘] = param[‘current_pos‘]
            #  tl记录起始位置,br记录最终位置

    cv2.setMouseCallback(title onMouse mouse_params)
    cv2.imshow(title im)

    while mouse_params[‘br‘] is None:
        im_draw = np.copy(im)

        if mouse_params[‘tl‘] is not None:
            cv2.rectangle(im_draw mouse_params[‘tl‘]
                mouse_params[‘current_pos‘] (255 0 0))
      #此while循环条件为没有第二次按下,然后不断随鼠标移动画矩形
        cv2.imshow(title im_draw)
        _ = cv2.waitKey(10)

    cv2.destroyWindow(title)

    tl = (min(mouse_params[‘tl‘][0] mouse_params[‘br‘][0])
        min(mouse_params[‘tl‘][1] mouse_params[‘br‘][1]))
    br = (max(mouse_params[‘tl‘][0] mouse_params[‘br‘][0])
        max(mouse_params[‘tl‘][1] mouse_params[‘br‘][1]))
    # t1表示矩形左上角的点,t2表示右下角的点
    #print mouse_params[‘tl‘]mouse_params[‘br‘]

    return (tl br)

def xuanze(frame):
        a1a2 = get_rect(frame title=‘img1‘) #手动选框
        rhcw = a1[1]a2[1]-a1[1]a1[0]a2[0]-a1[0] #手动选框

        track_window = (crwh)

        # 设置所要跟踪的ROI
        roi = frame[r:r+h c:c+w]
        hsv_roi =  cv2.cvtColor(roi cv2.COLOR_BGR2HSV)
        mask = cv2.inRange(hsv_roi np.array((0. 60.32.)) np.array((180.255.255.)))
        roi_hist = cv2.calcHist([hsv_roi][0]mask[180][0180])
        cv2.normalize(roi_histroi_hist0255cv2.NORM_MINMAX)

        while(1):
            ret frame = cap.read()
            hsv = cv2.cvtColor(frame cv2.COLOR_BGR2HSV)
            dst = cv2.calcBackProject([hsv][0]roi_hist[0180]1)
            term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT 10 1 )
            # apply meanshift to get the new location
            ret track_window = cv2.meanShift(dst track_window term_crit)

            # Draw it on image
            xywh = track_window
            cv2.rectangle(frame (xy) (x+wy+h) 2552)
            cv2.namedWindow(‘img2‘)
            cv2.moveWindow(‘img2‘ 100 0)   #控制播放窗口位于屏幕中间
            cv2.waitKey(30)
            cv2.imshow(‘img2‘frame)
            cv2.destroyWindow(‘video‘)
            k = cv2.waitKey(10) & 0xff
            if k == 27:
                break
cap = cv2.VideoCapture(‘yundong1.mp4‘)
cv2.namedWindow(“video“)
cv2.moveWindow(“video“ 10

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4511  2018-01-09 21:38  鼠标选择跟踪.py
     文件        4372  2018-01-09 21:37  python目标跟踪(鼠标).txt

评论

共有 条评论