Opencv入门系列十一

Opencv入门系列十一


主要内容:摄像头(视频)处理

OpenCV提供了cv2.VideoCapture类和cv2.VideoWriter类来支持各种类型的视频文件。常用函数包括初始化、打开、帧捕获、释放、属性设置等,下面对这些函数进行简单的介绍。

1.VideoCapture类

1.1 构造函数

OpenCV为cv2.VideoCapture类提供了构造函数cv2.VideoCapture(),用于打开摄像头并完成摄像头(或者视频)的初始化工作。其语法格式为:

image-20210207144023678

● “摄像头ID号”:摄像头的ID号码。其默认值为-1,表示随机选取一个摄像头。或者是处理视频的路径。

● “捕获对象”:返回值,是cv2.VideoCapture类的对象。

1.2 检测初始化

检测摄像头(视频)是否打开成功的函数cv2.VideoCapture.isOpened()来检查初始化是否成功。其语法格式如下:

image-20210207144330184

● 如果成功,则返回值retval为True。

● 如果不成功,则返回值retval为False。

1.3 打开

打开摄像头(视频)的函数cv2.VideoCapture.open()打开摄像头,其语法格式如下:

image-20210207144500999

● index:摄像头ID号。

● retval:返回值,当摄像头(或者视频文件)被成功打开时,返回值为True。

1.4 获取帧

获取摄像头帧的函数cv2.VideoCapture.read(),其语法格式如下:

image-20210207144616199

● image;返回的捕获到的帧,如果没有帧被捕获,则该值为空。

● retval:如果成功则该值为True,不成功则为False。

1.5 释放

释放摄像头对象的函数cv2.VideoCapture.release(),其语法格式如下:

image-20210207144740915

例如:cap.release()。 cap是一个cv2.VideoCapture对象。

1.6 属性

获取摄像头对象属性的函数cv2.VideoCapture.get(),其语法格式如下:

image-20210208104108908

例如,有一个cv2.VideoCapture类对象cap,

则:

​ ● 通过cap.get(cv2.CAP_PROP_FRAME_WIDTH),就能获取当前帧对象的宽度。

​ ● 通过cap.get(cv2.CAP_PROP_FRAME_HEIGHT),就能获取当前帧对象的高度。

设置摄像头对象属性的函数cv2.VedeoCapture.set(),其语法格式如下:

image-20210208104241990

有一个cv2.VideoCapture类对象cap,

则:

​ ● 语句cap=cvc.set(cv2.CAP_PROP_FRAME_WIDTH, 640)将当前帧对象的宽度设置为640像素。

​ ● 语句cap=cvc.set(cv2.CAP_PROP_FRAME_HEIGHT,480)将当前帧对象的高度设置为480像素。

可操作属性如下:

image-20210208104355813

image-20210208104430719

image-20210208104446221

1.7 获取打码帧和解码

函数cv2.VideoCapture.grab()用来指向下一帧,其语法格式是:

image-20210208104643964

成功指向下一帧,则返回值retval为True。

函数cv2.VideoCapture.retrieve()用来解码,并返回函数v2.VideoCapture.grab()捕获的视频帧。其语法格式是:

image-20210208104732101

● image:返回的视频帧,如果未成功,则返回一个空图像。

● retval:布尔型值,若未成功,返回False;否则,返回True。

cv2.VideoCapture.read()函数只能读取一个视频对象,它包括了grab和retrieve两个操作。

cv2.VideoCapture.grab()和cv2VideoCapture.retrieve()函数可以用于同步一组或一个多头(multihead)摄像头读取多个视频对象。

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    flag , img = cap.read()
    if flag:
        cv2.imshow("img", img)
    c = cv2.waitKey(25)
    if c == 27:     #按下ESC关闭
        break

上面是一个简单使用电脑自带摄像头的一个案例。

2.VideoWriter类

2.1 构造函数

cv2.VideoWriter()是创建cv2.VideoWriter对象的构造函数,其语法如下:

image-20210208110300147

● filename:输出目标视频的存放路径和文件名。如果指定的文件名已经存在,则会覆盖这个文件。

● fourcc:视频编/解码类型(格式)。在OpenCV中用函数cv2.VideoWriter_fourcc()来指定视频编码格式。cv2.VideoWriter_fourcc()有4个字符参数。这4个字符参数构成了编/解码器的“4字标记”,每个编/解码器都有一个这样的标记。下面列出几个常用的标记。当参数fourcc为“-1”,则程序运行时会弹出一个对话框,用户可以自行选择。

​ ● cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’)表示未压缩的YUV颜色编码格式,文件扩展名为.avi。

​ ● cv2.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’)表示MPEG-1编码类型,扩展名为.avi。

​ ● cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’)表示MPEG-4编码类型。扩展名为.avi。

​ ● cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’)表示OggVorbis编码类型,扩展名为.ogv。

​ ● cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘I’)表示Flash视频,扩展名为.flv。

​ 另外还有很多类型,见http://www.fourcc.org

● fps:帧速率。

● frameSize:每一帧的长和宽。

● isColor:是否为彩色图像。

2.2 写入

cv2.VideoWriter类中的函数cv2.VideoWriter.write()用于写入下一帧视频。其语法格式为:

image-20210208110903447

● image:cv2.VideoWriter对象要写入的视频帧

假如有一个cv2.VideoWriter()构造函数创建的对象vw和一个视频帧img:

​ 那么就可以使用,vw.writer(img) 安装vw对象的配置写入对应的文件中。

2.3 释放

cv2.VideoWriter类对象时,需要将其释放。释放该类对象时所使用的是函数cv2.VideoWriter.release()。其语法格式是:

image-20210208111244862

假如有一个cv2.VideoWriter()构造函数创建的对象vw:

​ 那么就可以使用,vw.release()释放vw对象。

3 对视频进行边缘检测

import cv2

cap = cv2.VideoCapture(0)
fource1 = cv2.VideoWriter_fourcc('F', 'L', 'V', 'I')
writer = cv2.VideoWriter("vi.flv",fource1,10,(640,480),True)
while cap.isOpened():
    flag , img = cap.read()
    if flag:
        img2 = cv2.Canny(img,50,200)
        cv2.imshow("img2", img2)
        if writer.isOpened():
            writer.write(img2)
    c = cv2.waitKey(25)
    if c == 27:     #按下ESC关闭
        break
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值