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 ...
 
随机推荐
- vue-router总结
			
之前写过一篇关于vue-router的文章,主要是介绍怎么结合cli2在项目中使用vue-router,比较的简单,今天想结合cli3来总结一下vue-router的具体用法. cli3 在介绍vue ...
 - R语言——实验5-聚类分析
			
针对课件中的例子自己实现k-means算法 调用R语言自带kmeans()对给定数据集表示的文档进行聚类. 给定数据集: a) 数据代表的是文本信息. b) 第一行代表词 ...
 - Java学习——读写txt文件
			
package HHH; import java.io.*; import static java.lang.System.out; public class OpenFile { public st ...
 - 使用Spring MockMVC对controller做单元测试(转)
			
https://www.cnblogs.com/ylty/p/6420738.html 1.对单一controller做测试. import org.junit.Before; import org. ...
 - 哈希表(Hash Table)原理及其实现
			
原理 介绍 哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映 ...
 - java中,什么是方法的重载?需要满足什么条件?两同三不同指的什么?
			
方法重载需要满足以下几个条件: 在同一个类中 方法的名称相同 参数列表不同 方法重载有以下特点: 与访问修饰符和返回值类型无关 与异常无关 方法重载的作用: 传递不同的参数实现相同的效果 所谓两同,就 ...
 - HDFS 入门介绍
			
HDFS简介 HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问, ...
 - Doris与Hadoop yarn混合部署遇到的坑
			
Doris默认端口 Yarn 默认端口: 如图,端口冲突,在混合部署的情况下,会出现2个问题: 1. Yarn ResourceManager启动不起来 解决办法:修改yarn.resourceman ...
 - C# webbrowser全掌握(二)
			
全篇引用单元mshtml; 路径:C:\windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.msh ...
 - Mysql 中获取刚插入的自增长id的值
			
insert into user (username,password) VALUES ('); //获取刚插入的自增长id的值 select last_insert_id(); 在MySQL中,使用 ...