-
大小: 4KB文件类型: .zip金币: 2下载: 1 次发布日期: 2021-05-11
- 语言: Python
- 标签: python; opencv; meanshift; 识别跟踪
资源简介
本程序是基于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
评论
共有 条评论