# -*- coding: utf-8 -*-
"""
Created on Mon Oct 1 09:32:37 2018 @author: Manuel
""" import numpy as np
from tkinter import *
#import tkinter
from PIL import Image, ImageTk
from scipy.misc import imread
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from time import gmtime, strftime
import cv2 #逐帧获取图片
videoFile = 'py5.mp4'
cap = cv2.VideoCapture(videoFile)
numF=cap.get(cv2.CAP_PROP_FRAME_COUNT)
fps=cap.get(cv2.CAP_PROP_FPS)
#cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)
#cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
class SVM_Classifier(Frame):
def __init__(self, master=None):
self.root = Tk()#tkinter.TK()
Frame.__init__(self, master)
Pack.config(self)
self.menus()
self.createWidgets()
self.after(10, self.callback)
self.state=0
global X_list
X_list=[]
global y_list
y_list=[]
def menus(self):
allmenu = Menu(self.root)#tkinter.Menu
# 添加子菜单
menu1 = Menu(allmenu, tearoff=0)
menu2=Menu(allmenu, tearoff=0)
# 添加选项卡
menu1.add_command(label='前景', command=self.target)
menu1.add_command(label='背景', command=self.background)
allmenu.add_cascade(label='样本标注', menu=menu1)
menu2.add_command(label='SVM学习并显示结果', command=self.processing)
allmenu.add_cascade(label='分析处理', menu=menu2)
self.root.config(menu=allmenu)
def target(self):
self.state=1
def background(self):
self.state=2
def processing(self):
self.state=0
X=np.array(X_list)
y=np.array(y_list)
print(X)
print(y)
#将X,Y写入txt文件
# np_X=[]
# np_y=[]
# np_X.append(X)
# np_y.append(y)
# svm_x='svm_x.txt'
# svm_y='svm_y.txt'
# X1_string = '\n'.join(str(x) for x in X)
# with open(svm_x,'w') as svm_file:
# svm_file.write(X1_string)
# y1_string = '\n'.join(str(x) for x in y)
# with open(svm_y,'w') as svm_file:
# svm_file.write(y1_string) #支持向量机学习
clf=SVC(kernel="linear", C=0.025)#SVC(gamma=2, C=1)
clf.fit(X, y)#SVM学习
score = clf.score(X,y)
print('score=',score) while(True):
ret, frame = cap.read()
if ret ==True:
image = frame
#img=rotate(frame,-90)
#img=np.rot90(frame)
#img=np.rot90(img)
#img=np.rot90(img)
cv2.imshow('my', image)
f = strftime("%Y%m%d%H%M%S.jpg", gmtime())
cv2.imwrite(f, image)
# image = imread("test.jpg")#fruits.png
image=imread(f)
XX=[]
for i in range(image.shape[0]):
for j in range(image.shape[1]):
XX.append([image[i,j,0],image[i,j,1],image[i,j,2]])
Z=clf.decision_function(XX)
ZZ=np.array(Z)
ZZ=ZZ.reshape(image.shape[0],image.shape[1])
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if ZZ[i,j]<0:
image[i,j,0]=0
image[i,j,1]=0
image[i,j,2]=0
image= image[...,::-1]
_,image=cv2.threshold(image,10,255,cv2.THRESH_BINARY)
# image= cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)
# _,image=cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# cv2.imshow("image CR", cr1)
cv2.imshow("Skin", image) # img0 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将图片转换为灰度图片
f = strftime("%Y%m%d%H%M%S_.jpg", gmtime())
cv2.imwrite('2/'+ f, image)
#if img.size == 0:
# break if cv2.waitKey(200) & 0xFF == ord('q'):
break
cap.release
cv2.destroyAllWindows() # for i in range(image.shape[0]):
# for j in range(image.shape[1]):
# Z = clf.decision_function([[image[i,j,0],image[i,j,1],image[i,j,2]]])
# if Z[0]<0:
# image[i,j,0]=0
# image[i,j,1]=0
# image[i,j,2]=0
# plt.imshow(image)
# plt.show() def createWidgets(self):
## The playing field
self.draw = Canvas(self, width=640, height=480)
self.im=Image.open('20190104030935.jpg')#fruits.png
self.tkimg=ImageTk.PhotoImage(self.im)
self.myImg=self.draw.create_image(10,10,anchor=NW,image=self.tkimg) self.draw.pack(side=LEFT)
def mouse_pick(self,event):
rgb=self.im.getpixel((event.x-10,event.y-10))
print("clicked at:x=", event.x-10,'y=',event.y-10,' r=',rgb[0],'g=',rgb[1],'b=',rgb[2])
X_list.append([np.uint8(rgb[0]),np.uint8(rgb[1]),np.uint8(rgb[2])])
if self.state==1:
self.pick_points = self.draw.create_oval((event.x - 2),(event.y - 2),(event.x + 2),(event.y + 2),fill="red")
y_list.append(1)#添加入前景标签
if self.state==2:
self.pick_points = self.draw.create_oval((event.x - 2),(event.y - 2),(event.x + 2),(event.y + 2),fill="green")
y=y_list.append(-1)#添加入背景标签
def callback(self, *args):
self.draw.tag_bind(self.myImg, "<Button-1>", self.mouse_pick) game = SVM_Classifier()
game.mainloop()

根据svm将视频帧转换为img的更多相关文章

  1. FFmpeg 入门(1):截取视频帧

    本文转自:FFmpeg 入门(1):截取视频帧 | www.samirchen.com 背景 在 Mac OS 上如果要运行教程中的相关代码需要先安装 FFmpeg,建议使用 brew 来安装: // ...

  2. [转]android 获取视频帧

    本文转自:http://blog.csdn.net/heart_Moving/article/details/17414067 今天做Android视频文件解码,需求:从一个视频文件获取到一帧一帧的图 ...

  3. 使用X264编码yuv格式的视频帧使用ffmpeg解码h264视频帧

    前面一篇博客介绍在centos上搭建点击打开链接ffmpeg及x264开发环境.以下就来问个样例: 1.利用x264库将YUV格式视频文件编码为h264格式视频文件 2.利用ffmpeh库将h264格 ...

  4. A TensorBoard plugin for visualizing arbitrary tensors in a video as your network trains.Beholder是一个TensorBoard插件,用于在模型训练时查看视频帧。

    Beholder is a TensorBoard plugin for viewing frames of a video while your model trains. It comes wit ...

  5. [SimplePlayer] 3. 视频帧同步

    Frame Rate 帧率代表的是每一秒所播放的视频图像数目.通常,视频都会有固定的帧率,具体点地说是每一帧的时间间隔都是一样的,这种情况简称为CFR(Constant Frame Rate);另外一 ...

  6. C++调用ffmpeg.exe提取视频帧

    有时候,我们获得一段视频,需要将其中的每一帧都提取出来,来进行一些相关的处理,这时候我们就可以需要用到ffmpeg.exe来进行视频帧的提取. ffmpeg简介:FFmpeg是一套可以用来记录.转换数 ...

  7. 基于C#利用ffmpeg提取视频帧

    利用ffmepg提取视频帧实际上是利用C#调用ffmepg命令行进行处理对应的视频,然后输出出视频帧 GetPicFromVideo("); static public string Get ...

  8. FFmpeg进行视频帧提取&音频重采样-Process.waitFor()引发的阻塞超时

    由于产品需要对视频做一系列的解析操作,利用FFmpeg命令来完成视频的音频提取.第一帧提取作为封面图片.音频重采样.字幕压缩等功能: 前一篇文章已经记录了FFmpeg在JAVA中的使用-音频提取&am ...

  9. python opencv 按一定间隔截取视频帧

    前言关于opencvOpenCV 是 Intel 开源计算机视觉库 (Computer Version) .它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. ...

随机推荐

  1. P2837晚餐队列安排

    传送 特写此篇,纪念不用dp做dp题 洛谷说这是个dp,但我不信(其实就是不会dp),因此我们考虑用另一种思路.修改后的队列每一个 数a[i]一定满足a[i]<=a[i+1],那修改后的顺序就是 ...

  2. PAT 乙级 1009 说反话 (20) C++版

    1009. 说反话 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中 ...

  3. 服务容错保护断路器Hystrix之七:做到自动降级

    从<高可用服务设计之二:Rate limiting 限流与降级>中的“自动降级”中,我们这边将系统遇到“危险”时采取的整套应急方案和措施统一称为降级或服务降级.想要帮助服务做到自动降级,需 ...

  4. git安装及git命令的用法

    git安装流程 https://git-scm.com/download/win (官网下载) git安装步骤 1.双击安装包 图文解释:

  5. library之目录

    组件之fragment: Android viewpager结合fragment的相关优化: 组件之webview: WebView的使用及实战(cookie同步和cookie清除); Android ...

  6. Jmeter(十三)Debug Sampler

    上篇记录了关联的一些内容.当然,关联是有“风险”的,经常写的正则表达式,jsonpath,xpath自己认为是没问题的,可是就是跑起来有问题,百思不得其解,究竟是数据问题还是表达式的问题,本篇就来记录 ...

  7. 三种方式控制GPIO

    BBB为REV C,emmc4G版本,系统为Debian 7.9 wheezy (2015.11.12),内核为Linux 3.8.13.使用命令cat /etc/dogtag查看 查看系统信息的四种 ...

  8. CentOS7 安装kylin2.6.0集群

    1. 环境准备 zookeeper3.4.12 mysql5.7 hive2.3.4 hadoop2.7.3 JDK1.8 hbase1.3.3 2. 集群规划 ip地址 机器名 角色 192.168 ...

  9. SVN安装后bin中没有svn.exe,TortoiseSVN安装后bin目录中没有svn.exe;

    TortoiseSVN的bin目录中没有svn.exe 为什么没有,是因为安装TortoiseSVN的时候没有勾选指定安装项:找到svn的安装包,不用卸载旧的直接安装: 1.选择Modify 2.注意 ...

  10. phalcon断点调试(phpStorm+xdebug)

    1.下载并添加chrome插件xdebug helper,下载地址:http://www.downcc.com/soft/261091.html 2.php添加xdebug扩展 mkdir -p /u ...