open cv——视频的操作

cv2.VideoCapture(),cv2.VideoWriter(),Capture.read(),Capture.isOpen(),cv2.VideoWriter_fourcc(),Capture.release(),VideoWrite.release(),Capture.set()

目标

·学会读取视频,播放视频和保存视频

·学会使用摄像机捕获视频并且展示

·使用函数cv2.VideoCapture(),cv2.VideoWriter()

使用摄像头获取视频

我们经常使用摄像机获取现场的画面。对此Open cv提供了一个非常简单的接口。下面让我们从摄像机里面获取一端视频(使用笔记本电脑内置的网络摄像机)。把视频转化为灰度视频并且把它展示出来。这是一项很简单的任务。

要去获取视频,你需要创建一个VideoCapture对象。参数可以是设备的索引值或者视频名称。设备的索引值只是为了区分不同的设备。像我,一台电脑一般只有一个摄像设备。所以我只传了一个简单的0(或者-1)作为参数。你可以使用别的摄像头,这个时候参数就是1或者其他的什么数字。在那之后,一帧一帧地获取你视频。最后别忘了释放VideoCapture对象。

import numpy as np

import cv2

#导入库

cap = cv2.VideoCapture(0)

#创建Capture对象cap,由于传入的参数是'0',因此使用内置的摄像头

while(True):

ret, frame = cap.read()

# 不断一帧一帧读入视频,ret是一个布尔值,可以判断是否正确读入帧,frame就是帧(视频就是一帧一帧播放)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# 把读入的帧转化为灰度图

cv2.imshow('frame',gray)

if cv2.waitKey(1) & 0xFF == ord('q'):

#当在键盘上输入'q'的时候就执行下面的break操作,waiteKey的参数1代表播放的帧速率是1ms/帧

    break

cap.release()

#释放Capture对象

cv2.destroyAllWindows()

#关闭所有窗口

Cap.read(返回一个布尔值。如果正确读入了帧,那么这个布尔值就是True。所以你可以检查这个值来检查这个视频是否正确。

有时候这个Capture对象不能正确创建,这个时候可以调用Capture.isOpen()来检查,如果这个值是True,那么就可以了。否则还要调用Capture.open()函数。

你也可以调用Capture.get(propld)方法,propld是从0-18的数字。每一个数字代表视频的一个属性(如果对视频是可用的属性的话),比如视频的尺寸分别是参数3和4。完整的属性可以通过:Property Identifier来查看(dir()等)。改变属性的方法是Capture.set(propld,value)来改变。Value参数就是你想要的属性。

从文件中读取视频

与从摄像头中读取视频很类似,知识把摄像头的索引值变成视频文件的名称。同样在播放视频的时候使用合适的帧间隔函数cv2.waitKey(),括号内的数字代表帧与帧之间的间隔,0代表静态帧。数值设置为25是比较合适的。

import numpy as np

import cv2

cap = cv2.VideoCapture('vtest.avi')

while(cap.isOpened()):

#判断能不能打开文件

ret, frame = cap.read()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cv2.imshow('frame',gray)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()


注意:

确保你已经安装了正确版本的ffmpeg或者gstream。

保存视频

我们一帧一帧把视频拿出来了,接下来就是如何保存视频。对于图像,保存是非常简单的,就是cv2.imwrite()。但是视频的保存要复杂一点。

保存视频需要一个VideoWrite对象。需要明确给出要保存的视频的名称,需要加后缀,比如:output.avi。然后是FourCC代码(在下文会有说明)。然后是帧速率(fps)和帧尺寸。最后一个是isColor标志。如果是True,那么视频的编码就需要色彩帧,否则就是灰度帧。

上面提到的FourCC是一个四字节的代码,明确视频的编码或者解码器。可用的视频编码格式在fourcc.org里面有说明。下面是一些可用的编码解码器:

·在Fedora操作系统中:DIVX, XVID, MJPG, X264, WMV1, WMV2.(XVID受人们欢迎,MJPG是高尺寸的视频,X264是低尺寸视频)

·对于windows:DIVX

·对于OSX:

上面的解码器都是四个字节(可能不是那么准确)的,也就是FourCC,在使用FourCC的时候,需要传递参数:cv2.VideoWriter_fourcc(‘M’,’J’,’P’,’G’),或者是cv2.VideoWriter_fourcc(*’MJPG)

import numpy as np

import cv2

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')

out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

#创建一个VideoWrite对象

while(cap.isOpened()):

ret, frame = cap.read()

if ret==True:

frame = cv2.flip(frame,0)

# 调转帧方向

out.write(frame)

cv2.imshow('frame',frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

else:

break

cap.release()

out.release()

cv2.destroyAllWindows()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容