【秣厉科技】LabVIEW工具包——OpenCV 教程(3):摄像头与视频读写


前言

  1. 需要下载安装OpenCV工具包的朋友,请前往 此处
  2. 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。

读取摄像头

从摄像头读取画面,需要用到 videoio 模块的 VideoCapture 类,选板位置如下图。

在这里插入图片描述

1. 使用 read 读取方式

从摄像头读取一帧画面,然后关闭摄像头,最简单的方法就是依照 “new - open - read - release” 流程,如下图。

其中,open.vi 切换到“index”模式,输入的参数index代表摄像头索引号(默认0),参数apiPreference代表优先调用的摄像头API类型(默认为CAP_ANY)。

如果摄像头打开较慢,可以将apiPreference改成与你的摄像头适配的值,比如Windows自带摄像头常用DirectShow,那么apiPreference就改为CAP_DSHOW。

在这里插入图片描述

2. 使用 grab-retrieve 读取方式

另一种读取方式是,先用 grab 快速将本帧标记为“已读”,然后再用 retrieve 获取本帧图像。相当于将 read 过程一分为二。这种方式在多摄像头同步方面十分有用。

在这里插入图片描述

3. 设置与获取参数

使用 VideoCapture 类下的 set 与 get 函数,可以设置、获取摄像头的参数。必须在 open 之后使用!

最常用的是修改视频分辨率参数,即 CAP_PROP_FRAME_WIDTH 和 CAP_PROP_FRAME_HEIGHT,分别代表画面的宽度和高度,如下图。

注意,如果你设置了摄像头不支持的分辨率,那么实际读取的图像尺寸与你设置的将会不同。

在这里插入图片描述

4. 小技巧:LV图片控件自适应缩放

为了能在各种分辨率下,让图像在LV控件中 “铺满+居中”,可以使用属性节点,动态调整图片控件的缩放因子与起点偏置。注意,这种方法仅仅是改变了LV控件属性,而Mat图像本身的尺寸并未改变。

  • 对“picture”控件点右键 - create - Reference ,得到该控件的引用;

在这里插入图片描述

  • 插入属性节点,分别获取控件绘图区域的宽、高,以及Mat图像的宽(cols)、高(rows);

在这里插入图片描述

  • 将控件的宽、高,分别与Mat图像的宽、高做除法,取两个商中的较小值作为最佳缩放因子。缩放之后,若宽有剩余则水平调整居中,若高有剩余则垂直调整居中。同样使用属性节点,将计算得到的缩放因子和偏置量,写入picture控件的属性。

在这里插入图片描述

  • 上述框图有点大,在范例文件夹下,有一个封装好的子VI,可以直接拿来用。
    范例位置:/examples/Molitec/OpenCV/videoio/_subVI/fit_to_center.vi

在这里插入图片描述

5. 连续采集摄像头画面

使用LabVIEW的While循环结构,连续采集摄像头画面并显示,如下图。

open 与 read 都有bool类型的返回值,代表操作是否成功,可以作为程序异常退出的条件,从而避免由于摄像头意外断开或出错时造成LabVIEW程序死锁。用户点击stop按钮,也可以手动停止采集画面。

在这里插入图片描述


读取URL视频流

将 open.vi 切换成“filename”模式,可以读取URL视频流。 这种模式适合网络摄像头,比如海康威视系列摄像头,URL规则为:rtsp://username:password@camera_ip/h264/ch1/main/av_stream

下图展示的是:连续采集网络摄像头的画面,并同步显示。特别读取 CAP_PROP_FPS 参数(每秒帧数),并以此计算得到采集间隔,从而控制While循环的周期时间。

在这里插入图片描述
在这里插入图片描述

同时,还可以获取网络视频源、直播源的URL画面。以下两个URL,留给大家做测试:
1、(吃鸡游戏观战)
rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid

2、(iphone宣传视频)
https://www.apple.com/105/media/us/iphone-x/2017/01df5b43-28e4-4848-bf20-490c34a926a7/films/feature/iphone-x-feature-tpl-cc-us-20170912_1920x1080h.mp4


读取视频文件

同样将 open.vi 切换成“filename”模式,输入参数填写本地视频文件的路径,就可以读取视频文件。

请参考工具包附带的范例:examples/Molitec/OpenCV/videoio/VideoCapture_2(File).vi

特别读取 CAP_PROP_FPS 参数(每秒帧数),并以此计算得到采集间隔,从而控制While循环的周期时间。否则视频将会被“快进”播放。读取 CAP_PROP_FRAME_COUNT (总帧数),除以FPS,得到视频总时长。

当读取完最后一帧后,下一次循环的 read 将返回False,进而将While循环退出。

在这里插入图片描述
在这里插入图片描述


录制视频文件

将一系列连续的画面帧,写成视频文件,需要用到 VideoWriter 类,选板位置如下图。

在这里插入图片描述

VideoWriter 类的标准使用流程与 VideoCapture 类似:“new - open - write - release”。必要时,使用 set 和 get 函数来设置和获取参数。

请参考工具包附带的范例:examples/Molitec/OpenCV/videoio/VideoWriter_1(record to file).vi

该范例从摄像头采集画面,并录制成MP4格式的视频文件,如下图。

在这里插入图片描述


总结

  1. 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
  2. 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
  3. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秣厉科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值