新注册新陌陌号刚注册就封号被封怎样才能解开

Python图像处理(3):视频显示
快乐虾(QQ群:Visual EmbedLinux Tools )欢迎转载,但请保留作者信息1.用OpenCV进行视频显示之前用OpenCV做了一个简单的视频显示:# -*- coding: utf-8 -*-
# 使用OpenCV播放视频
import cv2
wnd = 'OpenCV Video'
#获得视频的格式
videoCapture = cv2.VideoCapture('f:\\tmp\\cotton.mp4')
#获得码率及尺寸
fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
cv2.namedWindow(wnd, flags=0)
cv2.resizeWindow(wnd, size[0]/2, size[1]/2)
success, frame = videoCapture.read()
while success :
cv2.imshow(wnd, frame) #显示
cv2.waitKey(1000 / int(fps)) #延迟
success, frame = videoCapture.read() #获取下一帧
完全用cv2做视频读取和显示,这个程序有两个问题,一个是cv2窗口的缩放问题导致视频图像的变形,另一个是opencv提供的界面控制功能很弱,甚至于它都不提供在界面上显示按纽的能力,因此我们想办法替换界面显示的部分。2.用wxFormBuilder构建界面wxFormBuilder是一个使用wxWidgets的UI界面设计工具,可以很直观地进行UI设计,并生成C++/Python/Lua/Xrc相关的代码。我们用它构建视频播放器的界面:在主窗口上留下一个Panel控件用以嵌入matplotlib的窗口。wxFormBuilder自动生成了Python代码:# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Jun
## http://www.wxformbuilder.org/
## PLEASE DO &NOT& EDIT THIS FILE!
###########################################################################
import wx.xrc
###########################################################################
## Class MainFrame
###########################################################################
class MainFrame ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u&Video Player&, pos = wx.DefaultPosition, size = wx.Size( 757,562 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
self.m_timer = wx.Timer()
self.m_timer.SetOwner( self, wx.ID_ANY )
self.m_timer.Start( 40 )
MainSizer = wx.BoxSizer( wx.VERTICAL )
ButtonSizer = wx.BoxSizer( wx.HORIZONTAL )
self.m_btnStart = wx.Button( self, wx.ID_ANY, u&开始&, wx.DefaultPosition, wx.DefaultSize, 0 )
ButtonSizer.Add( self.m_btnStart, 0, wx.ALL, 5 )
self.m_btnStop = wx.Button( self, wx.ID_ANY, u&停止&, wx.DefaultPosition, wx.DefaultSize, 0 )
ButtonSizer.Add( self.m_btnStop, 0, wx.ALL, 5 )
MainSizer.Add( ButtonSizer, 0, wx.EXPAND, 5 )
PanelSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u&Matplotlib 控制区& ), wx.VERTICAL )
self.m_pnlMatplot = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.Size( -1,-1 ), 0 )
MatplotSizer = wx.BoxSizer( wx.VERTICAL )
self.m_pnlMatplot.SetSizer( MatplotSizer )
self.m_pnlMatplot.Layout()
MatplotSizer.Fit( self.m_pnlMatplot )
PanelSizer.Add( self.m_pnlMatplot, 1, wx.EXPAND |wx.ALL, 5 )
MainSizer.Add( PanelSizer, 1, wx.EXPAND, 5 )
self.SetSizer( MainSizer )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.Bind( wx.EVT_TIMER, self.OnTimer, id=wx.ID_ANY )
self.m_btnStart.Bind( wx.EVT_BUTTON, self.OnStart )
self.m_btnStop.Bind( wx.EVT_BUTTON, self.OnStop )
def __del__( self ):
# Virtual event handlers, overide them in your derived class
def OnTimer( self, event ):
event.Skip()
def OnStart( self, event ):
event.Skip()
def OnStop( self, event ):
event.Skip()
直接在此播放器工程中新建一个py文件,再将此代码复制到我们的播放器工程中,加上App和事件循环:app = wx.App()
frame = MainFrame(None)
frame.Show()
app.MainLoop()
3.编码问题在上节中直接在python工程中建立了一个新的py文件并将wxFormBuilder生成的代码复制过来,结果很悲摧:更改此文件的编码为UTF-8:再运行就好了:4.加上matplotlib显示接下来加上matplotlib显示功能。首先在Frame初始化的时候创建matplotlib所需要的canvas:
self.mpl_control = FigureCanvas(self.m_pnlMatplot, -1, plt.gcf())
MatplotSizer.Add(self.mpl_control, 1, wx.LEFT | wx.TOP | wx.GROW)
在按下开始的时候打开文件和定时器:
def OnStart( self, event ):
self.videoCapture = cv2.VideoCapture('f:\\tmp\\cotton.mp4')
if(self.videoCapture == None):
wx.SafeShowMessage('start', 'Open Failed')
self.fps = self.videoCapture.get(cv2.cv.CV_CAP_PROP_FPS)
self.m_timer.Start(100)
在按下停止的时候停止定时器:
def OnStop( self, event ):
self.m_timer.Stop()
在定时器事件中绘图:
def OnTimer( self, event ):
success, self.frame = self.videoCapture.read()
if(success) :
plt.imshow(self.frame)
self.mpl_control.draw_idle()
运行的结果就是这样的:5.内存泄漏在上述代码中,运行时存在严重的内存泄漏,在视频播放的时候内存使用率不断上升。查一下imshow的代码:
@docstring.dedent_interpd
def imshow(self, X, cmap=None, norm=None, aspect=None,
interpolation=None, alpha=None, vmin=None, vmax=None,
origin=None, extent=None, shape=None, filternorm=1,
filterrad=4.0, imlim=None, resample=None, url=None, **kwargs):
Display an image on the axes.
im = mimage.AxesImage(self, cmap, norm, interpolation, origin, extent,
filternorm=filternorm,
filterrad=filterrad, resample=resample, **kwargs)
im.set_data(X)
im.set_alpha(alpha)
if im.get_clip_path() is None:
# image does not already have clipping set, clip to axes patch
im.set_clip_path(self.patch)
#if norm is None and shape is None:
im.set_clim(vmin, vmax)
if vmin is not None or vmax is not None:
im.set_clim(vmin, vmax)
im.autoscale_None()
im.set_url(url)
# update ax.dataLim, and, if autoscaling, set viewLim
# to tightly fit the image, regardless of dataLim.
im.set_extent(im.get_extent())
self.add_image(im)
在这个函数的末尾使用将创建出来的图像添加到了图像列表中,而不是替换已经有的图像,这就导致了内存不断上升!知道原因后就容易处理了,修改我们的代码,在显示图像前删除之前的图像:
# Virtual event handlers, overide them in your derived class
def OnTimer( self, event ):
success, self.frame = self.videoCapture.read()
if(success) :
if(self.image != None) :
self.image.remove()
(b, g, r) = cv2.split(self.frame)
self.frame = cv2.merge([r,g,b])
self.image = plt.imshow(self.frame)
self.mpl_control.draw_idle()
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?基于OpenCV的摄像头脸部识别抓取及格式储存(Python)_Linux教程_Linux公社-Linux系统门户网站
你好,游客
基于OpenCV的摄像头脸部识别抓取及格式储存(Python)
来源:oschina.net&
作者:Kanonpy
刚接触OpenCV,参照OpenCV的sample例子做了一个视频头像抓取的小代码,顺便一起学习着用,先上视频抓取及存储代码:
# -*- coding: cp936 -*-import cv2&capture=cv2.VideoCapture(0)#将capture保存为motion-jpeg,cv_fourcc为保存格式size = (int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),& & & & int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))#cv_fourcc值要设置对,不然无法写入,而且不报错,坑video=cv2.VideoWriter("VideoTest.avi", cv2.cv.CV_FOURCC('I','4','2','0'), 30, size)#isopened可以查看摄像头是否开启print capture.isOpened()num=0#要不断读取image需要设置一个循环while True:& & ret,img=capture.read()& & #视频中的图片一张张写入& & video.write(img)& & cv2.imshow('Video',img)& & key=cv2.waitKey(1)#里面数字为delay时间,如果大于0为刷新时间,& & #超过指定时间则返回-1,等于0没有返回值,但也可以读取键盘数值,& & cv2.imwrite('%s.jpg'%(str(num)),img)& & num=num+1& & if key==ord('q'):#ord为键盘输入对应的整数,& & & & breakvideo.release()#如果不用release方法的话无法储存,要等结束程序再等摄像头关了才能显示保持成功capture.release()#把摄像头也顺便关了&cv2.destroyAllWindows()
OpenCV视频抓取好简单,主要用videowriter就可以了,主要要注意的是OpenCV中的抓取是放在内存中的,所以需要一个释放命令,不然就只能等到程序关闭后进行垃圾回收时才能释放了。视频抓取就不上图了。
然后是脸部识别,OpenCV自带了很多特征库有脸部,眼睛的还有很多,原理都一样,只是眼睛的库识别率视乎并不高,直接上代码:
#coding=utf-8import cv2import cv2.cv as cv&img = cv2.imread("5.jpg")&def detect(img, cascade):& & '''detectMultiScale函数中smallImg表示的是要检测的输入图像为smallImg,faces表示检测到的人脸目标序列,1.3表示每次图像尺寸减小的比例为1.3,&4表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸),&CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(20, 20)为目标的最小最大尺寸'''& & rects = cascade.detectMultiScale(img, scaleFactor=1.3,& & & & & & & & & & & & & & & & & &
minNeighbors=5, minSize=(30, 30), flags = cv.CV_HAAR_SCALE_IMAGE)& & if len(rects) == 0:& & & & return []& & rects[:,2:] += rects[:,:2]& & print rects& & return rects&#在img上绘制矩形def draw_rects(img, rects, color):& & for x1, y1, x2, y2 in rects:& & & & cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)&&#转换为灰度图gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#直方图均衡处理gray = cv2.equalizeHist(gray)&#脸部特征分类地址,里面还有其他cascade_fn = 'data/haarcascades/haarcascade_frontalface_alt.xml'&#读取分类器,CascadeClassifier下面有一个detectMultiScale方法来得到矩形cascade = cv2.CascadeClassifier(cascade_fn)&#通过分类器得到rectsrects = detect(gray, cascade)&#vis为img副本vis = img.copy()&#画矩形draw_rects(vis, rects, (0, 255, 0))&cv2.imshow('facedetect', vis)&cv2.waitKey(0)cv2.destroyAllWindows()
直接上效果图和原图对比:
--------------------------------------分割线 --------------------------------------
Linux下安装OpenCV2.4.1所需包
Ubuntu 12.04 安装 OpenCV2.4.2
下OpenCV无法读取视频文件
Ubuntu 12.04下安装OpenCV 2.4.5总结
Ubuntu 10.04中安装OpenCv2.1九步曲
基于QT和OpenCV的人脸识别系统
[翻译]Ubuntu 14.04, 13.10 下安装 OpenCV 2.4.9&
--------------------------------------分割线 --------------------------------------
OpenCV的详细介绍:OpenCV的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (11/08/:48)
& (11/14/:39)
& (05/05/:38)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Python中使用摄像头实现简单的延时摄影技术
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Python中使用摄像头实现简单的延时摄影技术,本文只是一个简单的小示例,讲解了实现过程并给出实现代码,需要的朋友可以参考下
延时摄影(英语:Time-lapse photography)是以一种较低的帧率拍 下图像或者视频,然后用正常或者较快的速率播放画面的摄影技术。在一段延时摄影视频中,物体或者景物缓慢变化的过程被压缩到一个较短的时间内,呈现出平时 用肉眼无法察觉的奇异精彩的景象。延时摄影可以认为是和高速摄影相反的一个过程。延时摄影通常应用在拍摄城市风光、自然风景、天文现象、生物演变等等题材上。”
最近买东西得了个小赠品,是一种可以快速生长的小草,拿回来就种在了办公桌上。今天发芽了,一时兴起打算做个延时摄影,办公室里正好有个非常老旧的640x480摄像头,于是有了下面的这个延时摄影动图(为了上传压缩了画面大小):
需要准备的:
2) 摄像头(如果电脑没有的话),淘宝上好多20以下包邮
3) Python 2.7,因为需要使用opencv,所以用Python2
4) opencv的Python binding,去官网上下载,如果不想自己编译,只要到\build\python\2.7\下面就可以找到32位和64位的cv2.pyd,把这个文件直接拷贝到\Python27\Lib\site-packages\即可
代码如下:
import cv2
import time
interval = 20
num_frames = 500
out_fps = 24
capture = cv2.VideoCapture(0)
size =(int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
video = cv2.VideoWriter("time_lapse.avi", cv2.cv.CV_FOURCC('I','4','2','0'), out_fps, size)
# for low quality webcams, discard the starting unstable frames
for i in xrange(42):
capture.read()
# capture frames to video
for i in xrange(num_frames):
_, frame = capture.read()
video.write(frame)
## Optional, in case you need the frames for GIF or so
filename = '{:4}.png'.format(i).replace(' ', '0')
cv2.imwrite(filename, frame)
print('Frame {} is captured.'.format(i))
time.sleep(interval)
video.release()
capture.release()
既然是简单的延时摄影,代码也是非常简单的。设定好拍摄间隔,总帧数和输出的帧率,用VideoCapture获取摄像头的图像,用VideoWriter写入视频,考虑到有些劣质摄像头在初始化的时候不稳定(比如我用的这个老式摄像头),在正式捕捉图向前可以考虑略过初始的几十帧,捕捉过程中也可以直接输出图片方便制作GIF或者其他用途。
最后再来一个铁皮盒上水滴蒸发的全过程:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具1469人阅读
用python调用opencv读取视频的时候失败
cap = cv2.VideoCapture(path)
if False == cap.isOpened():
print 'open video failed'
print 'open video succeeded'
确定了路径和文件都没有问题,cap.isOpened()总是返回false。
原因大概是缺少处理视频文件需要的dll。我的解决方法是把opencv文件夹中的 \3rdparty\ffmpeg里的opecv_ffmpeg.dll文件(e.g我的是D:\opencv\3rdparty\ffmpeg\opecv_ffmpeg.dll)复制到python文件夹目录(e.g我的是D:\python27)下。之后就能正常打开视频文件进行处理了。
我的环境是win7 64bit, python2.7+opencv2.3.1,IDE用eclipse。
更多的讨论和方法可以看这个
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6886次
排名:千里之外}

我要回帖

更多关于 陌陌怎么才能防封号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信