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 ...
随机推荐
- jquery add() 和js add()
HTML DOM add() 方法 HTML DOM Select 对象 定义和用法 add() 方法用于向 <select> 添加一个 <option> 元素. 语法 sel ...
- js中的内置对象(还没怎么看)
在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在 ...
- 廖雪峰Java3异常处理-1错误处理-2捕获异常
1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常 可能发生异常的语句放在try{... ...
- WordPress设置地址的问题
刚刚安装了一个Wordpress,第一次使用,所以对设置不是很熟悉. 在常规设置那里,有两个地址设置,一个是WordPress 地址(URL),另一个是站点地址(URL),刚开始分不清这两个的区别,所 ...
- dubbo服务telnet命令
转载 https://www.cnblogs.com/feiqihang/p/4387330.html dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本 ...
- random模块常用功能
- 编码(encode和decode)
一. 编码 1. ASCII编码 ASCII是最早的计算机编码,包含了英文字母(大小写),数字,标点等特殊符号,一共128个码位,最多只能用8位来表示(一个字节),ASCLL码最多256个位置,无法提 ...
- [UE4]小地图UI设计
一.新建一个名为TestMiniMap的UserWidget用来使用小地图StaticMiniMap. 二.在左侧“User Created”面板中可以看到除自身以外的其他所有用户创建的UserWid ...
- [UE4]模拟网络延迟和丢包
进入游戏界面,按下键盘的“~”键,打开控制台界面,输入net会自动列出跟网络相关的命令 1.Net pktLag=,模拟延迟,单位是毫秒 2.Net PktLagVariance=300,在模拟延迟的 ...
- IDEA远程调试
问题: 通常在java打成可运行的Jar项目时,运行jar时调试很不方便,特别是要在linux上面执行jar包的情况.此时需要将这个项目打成Jar包(如果是maven项目,直接使用pa ...