# -*- 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视频跟踪的更多相关文章

  1. 比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍

    转自:http://blog.csdn.net/carson2005/article/details/7647500 TLD(Tracking-Learning-Detection)是英国萨里大学的一 ...

  2. opencv视频跟踪2

    在前面的报告中我们实现了用SURF算法计算目标在移动摄像机拍摄到的视频中的位置.由于摄像机本身像素的限制,加之算法处理时间会随着图像质量的提高而提高,实际实验发现在背景复杂的情况下,结果偏差可能会很大 ...

  3. 目标跟踪ObjectT综述介绍

    此文也很详细:http://blog.csdn.net/maochongsandai110/article/details/11530045 原文链接:http://blog.csdn.net/pp5 ...

  4. 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...

  5. TLD目标跟踪算法

    1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...

  6. TLD视觉跟踪算法(转)

    源:TLD视觉跟踪算法 TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总 ...

  7. Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解

    视频目标跟踪问题分析         视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...

  8. OSVOS 半监督视频分割入门论文(中文翻译)

    摘要: 本文解决了半监督视频目标分割的问题.给定第一帧的mask,将目标从视频背景中分离出来.本文提出OSVOS,基于FCN框架的,可以连续依次地将在IMAGENET上学到的信息转移到通用语义信息,实 ...

  9. SVM核技巧之终极分析

    参考文献: http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html http://www.cnblogs.com/jerry ...

随机推荐

  1. ubuntu安装最新的mercurial

    Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强 之前安装的mercurial版本(2.8.2)太老了,想安装最新版本的. 网上搜到方法 su ...

  2. 即用了 测试脚本里面的 类的值,又继承了 unittest类 使用他的断言方法 (接口自动化 数据分离 变量相互调用 看这里)

  3. JDK类集框架实验(ArrayList,LinkedList,TreeSet,HashSet,TreeMap,HashMap)

        ArrayList import java.util.ArrayList; public class C8_3 { public static void main(String[] args) ...

  4. jQuery 事件的命名空间简单了解

    原文地址:http://www.jb51.net/article/43626.htm   用 jQuery 绑定和解绑事件监听器都是非常简单的,怎样精确地解绑其中一个监听器?我们需要了解一下事件的命名 ...

  5. 关于git中自己的分支和主分支有冲突的解决方案(git和乌龟git)

    阐述一个案例,最近在开发中遇到一个问题.自己在代码的主分支拉了一个分支,开始快乐的开发修改了.同事小明也在主分支拉了一个分支,也在快乐的修改.小明的开发速度很快,一个问题很快就解决了,并且把自己的代码 ...

  6. 部署redis5.0.3

    一.准备环境 1.下载 # wget http://download.redis.io/releases/redis-5.0.3.tar.gz [root@localhost ~]# wget htt ...

  7. [UE4]网络游戏重点思考

    一.哪些逻辑放服务器,哪些逻辑放客户端? 二.它们之间怎么通信?会不会覆盖? 三.服务器应该做哪些验证?(防止外挂)

  8. [UE4]加入音效

  9. .net core 认证

    http://www.cnblogs.com/RainingNight/p/cookie-authentication-in-asp-net-core.html

  10. sas 获取字符串长度实例

    data _null_;a='Dogcat';b=' Dog cat';c=' Dog cat   ';Ra=length(a);Rb=length(b);Rc=length(c);put Ra=Rb ...