# -*- 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. 【模态窗口-Modeldialog】提交请求时禁止在新窗口打开页面的处理方法

    在使用Window.ShowModalDialog()打开模态窗口后,在模态窗口内提交时总是会在新窗口中打开. 解决办法: 在要弹出的窗口的<head>之间加: <base targ ...

  2. 13-001 ViewComponents IViewComponentActivator

    接口定义: /// <summary> /// Provides methods to activate an instantiated ViewComponent /// </su ...

  3. windows 日志解决方法

    1.sql server 2012 报错 MSSQLSERVER 服务无法使用当前配置的密码以 .\MSSQL_SF_A9JGSK 身份登录,错误原因如下: 此帐户的密码已过期. 要确保服务配置正确, ...

  4. CRM 更新解决方案之注意事项

    一般需要开发新功能时,企业或者软件公司往往会先从生产环境克隆出一台测试用系统. 开发人员会在测试系统中对功能进行开发或者测试. 这时当新功能开发和测试完成之后,需要将新的解决方案导入生产环境. 导入时 ...

  5. Shiro 权限标签

    Shiro 权限标签: 导入标签库: <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" ...

  6. javasript-for循环

    先来个for循环的例子: var i=0,j=0; for(;i<10,j<6;i++,j++){ k=i+j; } console.log(k) 想知道会输出什么,首先得知道完整循环了多 ...

  7. delphi EncdDecd.pas单元中Encoding方法出现#$D#$A的解决方法

    例如: s:= 'http://detail.tmall.com/item.htm?id=45545826531&abbucket=_AB-M129_B17&acm=03130.100 ...

  8. solr如何让全词匹配结果在最前面

    在全文搜索中默认排序是按照匹配度权值score排序的,权值越大位置越靠前,那为什么有很多时候全词匹配反而不在最前面那,其实很简单因为全词匹配权值也就是100,但是还有很多权值大于100的排在了前面. ...

  9. python访问hive

    #!/usr/bin/env python # -*- coding: utf-8 -*- # hive util with hive server2 """ @auth ...

  10. sqlserver表结构的修改

    表添加新字段 sqlserver alter table 表名 add 新增字段名 新增字段类型 是否允许为空,如: alter table [数据库名].[dbo].[表名称] add [新增字段] ...