SVM视频跟踪
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 8 21:44:12 2018 @author: xg
""" import cv2
import numpy as np
from sklearn.svm import SVC
from skimage import measure,color
import matplotlib.pyplot as plt font = cv2.FONT_HERSHEY_SIMPLEX
state=0 #0:视频显示,1:静止画面,设置交互,2:跟踪
X_list=[]
y_list=[]
lx1,ly1=0,0
lx2,ly2=0,0
rx1,ry1=0,0
rx2,ry2=1,1
zoomX,zoomY=10,10
colorModel='rgb' def nothing(x):
pass
def mouse_callback(event,x,y,flags,param):
global lx1,ly1,lx2,ly2
global rx1,ry1,rx2,ry2
global zoomX,zoomY
if state==1 and cv2.getTrackbarPos('steps', 'capture')<2:
if event==cv2.EVENT_LBUTTONDOWN:
if colorModel=='rgb':
print("clicked at:x=", x,'y=',y,' r=',showimage[y,x,2],'g=',showimage[y,x,1],'b=',showimage[y,x,0])
X_list.append([np.float64(showimage[y,x,0]),np.float64(showimage[y,x,1]),np.float64(showimage[y,x,2])])
else:
print('clicked at:x=', x,'y=',y,' H=',hsvimage[y,x,0],' S=',hsvimage[y,x,1],' V=',hsvimage[y,x,2])
X_list.append([np.float64(hsvimage[y,x,0]),np.float64(hsvimage[y,x,1]),np.float64(hsvimage[y,x,2])])
if cv2.getTrackbarPos('steps', 'capture')==0:
y_list.append(-1)
cv2.circle(showimage,(x,y),1,(0,0,255),-1)
else:
y_list.append(1)
cv2.circle(showimage,(x,y),1,(255,0,0),-1)
elif event==cv2.EVENT_MOUSEMOVE:
#rgb='r='+str(showimage[y,x,2])+',g='+str(showimage[y,x,1])+',b='+str(showimage[y,x,0])
#cv2.putText(showimage, rgb, (10, 30), font, 1.2, (255, 0, 0), 2)
#print(rgb)
zoomX,zoomY=x,y
#:0,1:正负样本点,2:画ROI,3:画直线
if state==1 and cv2.getTrackbarPos('steps', 'capture')==2:
if event==cv2.EVENT_LBUTTONDOWN:
rx1,ry1=x,y
elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
rx2,ry2=x,y clf=SVC(kernel="linear", C=0.025) def processing():
X=np.array(X_list)
y=np.array(y_list)
clf.fit(X, y)
score = clf.score(X, y)
print('score=',score)
def connected_domain():
image3,image4=tracking()
labels=measure.label(image4,connectivity=2) #8连通区域标记
dst=color.label2rgb(labels) #根据不同的标记显示不同的颜色
print('regions number:',labels.max()+1) #显示连通区域块数(从0开始标记) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))
ax1.imshow(image4, plt.cm.gray, interpolation='nearest')
ax1.axis('off')
ax2.imshow(dst,interpolation='nearest')
ax2.axis('off') fig.tight_layout()
plt.show()
def tracking():
#image1=frame.copy()
image1=frame[np.minimum(ry1,ry2):np.maximum(ry1,ry2),np.minimum(rx1,rx2):np.maximum(rx1,rx2)] if colorModel=='rgb':
XX=image1.reshape(image1.shape[0]*image1.shape[1],3)
else:
hsvimage1=cv2.cvtColor(image1,cv2.COLOR_BGR2HSV)
XX=hsvimage1.reshape(image1.shape[0]*image1.shape[1],3)
Z=clf.decision_function(XX)
ZZ=np.array(Z)
ZZ=ZZ.reshape(image1.shape[0],image1.shape[1])
image2=np.zeros((image1.shape[0],image1.shape[1]),dtype=np.uint8)
for i in range(image1.shape[0]):
for j in range(image1.shape[1]):
if ZZ[i,j]>0:
image2[i,j]=0
#image1[i,j,0]=0
#image1[i,j,1]=0
#image1[i,j,2]=0
else:
image2[i,j]=255
#ret,thresh = cv2.threshold(ZZ,127,255,0)
_,contours,hierarchy=cv2.findContours(image2,1,2)
cnt=contours[0]
x,y,w,h=cv2.boundingRect(cnt)
image2=cv2.rectangle(image2,(x,y),(x+w,y+h),(0,255,0),2)
return image1,image2 cap = cv2.VideoCapture(0)
ret, frame = cap.read()
image=frame.copy()
showimage=frame.copy()
showimage2=frame.copy() cv2.namedWindow('capture')
cv2.setMouseCallback('capture',mouse_callback)
cv2.createTrackbar('steps','capture',0,2,nothing)
#cv2.createTrackbar('zoom','capture',10,50,zooming) #cv2.namedWindow('tracking') while(1):
#ret,frame1=cap.read()
# get a frame
if state==0:
ret, frame = cap.read()
showimage=frame.copy()
hsvimage=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
cv2.putText(showimage, 'vedio', (0, 30), font, 1.2, (255, 0, 0), 2)
showimage2=frame.copy()
if state==1 and cv2.getTrackbarPos('steps', 'capture')<2:
zoomXMin=np.maximum(0,zoomX-10)
zoomXMax=np.minimum(zoomX+10,showimage.shape[1])
zoomYMin=np.maximum(0,zoomY-10)
zoomYMax=np.minimum(zoomY+10,showimage.shape[0])
#print('zoomXMin=',zoomXMin,',zoomXMax=',zoomXMax,',zoomYMin=',zoomYMin,',zoomYMax=',zoomYMax)
zoomimage=showimage.copy()
zoomimage=zoomimage[zoomYMin:zoomYMax,zoomXMin:zoomXMax]
showimage2= cv2.resize(zoomimage, (0, 0),fx=10,fy=10,interpolation=cv2.INTER_CUBIC)
cv2.line(showimage2,(50,100),(150,100),(0,0,255),1)
cv2.line(showimage2,(100,50),(100,150),(0,0,255),1)
if state==1 and cv2.getTrackbarPos('steps', 'capture')>1:
ret, frame = cap.read()
showimage=frame.copy()
cv2.line(showimage,(lx1,ly1),(lx2,ly2),(0,255,0),1)
cv2.rectangle(showimage,(rx1,ry1),(rx2,ry2),(255,0,0),2)
if state==2:
ret, frame = cap.read()
showimage,showimage2=tracking()
# showimage = cv2.putText(image1, 'tracking', (0, 30), font, 1.2, (255, 0, 0), 2)
# showimage2=image2 cv2.imshow("capture", showimage)
#cv2.imshow("tracking", frame1) cv2.imshow('test',showimage2)
k=cv2.waitKey(1) & 0xFF
if k==ord('p'):
state=1
image=frame.copy()
showimage=frame.copy()
showimage = cv2.putText(showimage, 'set up', (0, 30), font, 1.2, (255, 0, 0), 2)
elif k==ord('s'):
if state==1:
cv2.imwrite("pic.jpg", frame)
elif k==ord('v'):
state=0
elif k==ord('c'):
processing()
elif k==ord('t'):
state=2
elif k==ord('d') and state==2:
connected_domain()
elif k==ord('q'):
break cap.release()
cv2.destroyAllWindows()
SVM视频跟踪的更多相关文章
- 比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍
转自:http://blog.csdn.net/carson2005/article/details/7647500 TLD(Tracking-Learning-Detection)是英国萨里大学的一 ...
- opencv视频跟踪2
在前面的报告中我们实现了用SURF算法计算目标在移动摄像机拍摄到的视频中的位置.由于摄像机本身像素的限制,加之算法处理时间会随着图像质量的提高而提高,实际实验发现在背景复杂的情况下,结果偏差可能会很大 ...
- 目标跟踪ObjectT综述介绍
此文也很详细:http://blog.csdn.net/maochongsandai110/article/details/11530045 原文链接:http://blog.csdn.net/pp5 ...
- 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...
- TLD目标跟踪算法
1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...
- TLD视觉跟踪算法(转)
源:TLD视觉跟踪算法 TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总 ...
- Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解
视频目标跟踪问题分析 视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...
- OSVOS 半监督视频分割入门论文(中文翻译)
摘要: 本文解决了半监督视频目标分割的问题.给定第一帧的mask,将目标从视频背景中分离出来.本文提出OSVOS,基于FCN框架的,可以连续依次地将在IMAGENET上学到的信息转移到通用语义信息,实 ...
- SVM核技巧之终极分析
参考文献: http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html http://www.cnblogs.com/jerry ...
随机推荐
- HTML+CSS补充
1. HTML+CSS补充 - 布局: <style> .w{ width:980px;margin:0 auto; } </style> <body> <d ...
- Hadoop概念学习系列之pagerank的友情链接(三十八)
博主我带大家,弄清楚一个事实. 比如,搜狐主页下方,有很多友情链接,这些友情链接,那可是一个位置就是多少钱. 有人说,一个位置多少钱,这又没有给我带来点击量,那我干嘛还每年花上几十万,给搜狐,就那么放 ...
- C#多线程更新,查询MongoDB数据
对多线程一直在用,但是从来没去深入研究过注意的事项,包括和锁的配合也是一知半解没有真正理解锁(lock)的用法. 这次在做数据分析是需要将访问的url中host部分记录,如果已经存在就直接匹配id,没 ...
- 服务容错保护断路器Hystrix之四:断路器监控(Hystrix Dashboard)-turbine集群监控
turbine 英[ˈtɜ:baɪn] n. 汽轮机; 涡轮机; 透平机; OK,上文我们看了一个监控单体应用的例子,在实际应用中,我们要监控的应用往往是一个集群,这个时候我们就得采取Turbine集 ...
- go语言学习--语法糖
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有 ...
- random模块常用功能
- [UE4]优先级与相关性
一.优先级 每个 Actor 都有一个名为 NetPriority 的浮点变量.这个变量的数值越大,Actor 相对于其他“同伴”的带宽就越多.和优先级为 1.0 的 Actor 相比,优先级是 2. ...
- Redis登陆服务器和批量删除指定的key
ps -ef |grep redis cd /opt/app/redis/bin ./redis-cli -h 192.168.0.67 -p 7001 -a 'hub2c!Redis'./redis ...
- Maven安装以及环境配置(Windows)
Maven是什么? Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期. 在 ...
- urllib模块学习
一.urllib库 概念:urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urll ...