• 1 前言
  • 2 打开USB摄像头并写视频
    • 2.1 摄像头相关操作
    • 2.2 写视频相关操作
  • 3 查询摄像头设备信息指令
  • 4 常见问题

1 前言

  如果你是视频技术处理研究领域的工程人员,那么用MATLAB&OpenCV打开摄像头,以及获取相关信息,是再常规不过的操作了。
  本文是对MATLAB打开USB摄像头操作的知识点梳理和总结。
  
  操作环境

  • MATLAB 2015b
  • Logitech HD720P
  • Windows 10 Enterprise 64Bit

2 打开USB摄像头并写视频

2.1 摄像头相关操作

video_source = videoinput('winvideo',1);
preview(video_source);

  这两行指令就可以打开USB摄像头,并预览显示了,当然,这里采用的都是默认参数,如果想控制视频参数,可以通过set方法。

video_source = videoinput('winvideo',1,‘RGB24_640x480’);
set(video_source,'ReturnedColorSpace','rgb');
preview(video_source);

  此时打开摄像头成功,会有一个弹窗出现显示实时的画面。

如果想在某一时刻获取视频帧,可以这样操作

frame = getsnapshot(video_source);
image(frame);

  获取的帧是从视频输入流中直接获取,可以通过时间函数来控制获取的频率,获取的帧可以存储在一个矩阵当中,作为一个视频流,方便计算。

2.2 写视频相关操作

  打开摄像头,更多的操作是保存一段视频,这要用到一个保存操作。


video_source = videoinput('winvideo',1,'RGB24_640x480');
set(video_source,'ReturnedColorSpace','rgb');preview(video_source);file_name = 'test.avi';
% 创建一个写文件的对象
writer = VideoWriter(file_name,'Motion JPEG AVI');
writer.FrameRate = 30.0;
% 通过总帧数来控制视频长度
length = 300;
% MATLAB里的视频文件其实是包含了两个部分的复合结构体,
% 这两个部分,一个是色域colormap,一个是视频数据内容
file.colormap=[];
% 打开对象,开始录制
open(writer);for i=1:lengthframe = getsnapshot(video_source);file.cdata = frame;writeVideo(writer,file);
end
% 随手把该关的对象全关掉,是个好习惯
close(writer);
closepreview;
delete(video_source);

  此时你会发现你的根目录文件夹里多了一个test.avi的文件。VideoWriter能做的事情还有很多,比如使用set方法更改一些视频录制参数等。

3 查询摄像头设备信息指令

  有些时候需要用到一些硬件信息,如视频编码格式。摄像头的硬件性能决定了其视频编码范围,相比于软件编码近乎万能的超凡能力(FFMPEG),硬件设备的硬编码能力十分有限,所以我们需要知道我们用的摄像头都有哪些信息和功能。

win_info = imaqhwinfo('winvideo');

  此时会打开一个结构体,这个结构体几乎包含了我们所需要的一切了,简单一点,可以直接从工作站里面点击打开其中内容,其中最常用的是DeviceInfo字段,里面包含其所支持的所有编码格式:


  相对应的,其编码格式的完整查询指令:

win_info = imaqhwinfo('winvideo');
win_info.DeviceInfo.SupportedFormats;

  可能更直观一点——

  顺便吐槽一下,不知道为什么,网上的技术贴总是把视频编码的查询写得那么复杂,明明2行就能解决问题的事情,非要写七八行……

4 常见问题

videoinput函数报错问题
  如果你是第一次使用MATLAB操作摄像头,有时候可能需要你安装一个插件来支持你的硬件设备,比如这种情况——

  点击Support Package Installer,安装一个插件就行了,不需要重启MATLAB

  如果你打不开这个界面,那么可能你的MATLAB没有破解完整,最糟糕的情况,可能需要重装MATLAB。

帧率问题
  **软件手段只能在硬件范围内起控制作用。**尽管我们有一个设置帧率的set函数,但麻烦的是,硬件有时候并不受软件控制,比如你设置帧率为100fps,但是一般USB摄像头只能支持到30fps了,100+都是高速摄像机的水平(好几万的那种),所以只能到30fps。更常见的情况是,当时用笔记本电脑,笔记笨使用内置电池,电量低的时候,摄像头受操作系统电量管理的影响,此时帧率会变得可能只有10fps左右(就是画面看起来糊糊的那种)。所以帧率有时候真的很难控制,因情况而异,如果你需要帧率作为计算参数,可以考虑通过统计时间,通过总帧数反推实际帧率,得到真实值。

编码格式的问题
  图像色域、视频编码格式、文件格式,这是三个概念,这里不再详细展开,但一般而言,几乎所有的设备都是支持RGB色域和RGB编码格式的,文件格式默认avi即可。如果对其他格式有想法,硬件又不支持,可以考虑使用视频转码(推荐使用FFMPEG)。
#5 总结
  这些操作其实没有技术含量,如果需要更深入的探索,可以钻研MATLAB DOC。这里写个帖子,以记录自己过去所学的知识点。

MATLAB打开USB摄像头的操作以及常见问题相关推荐

  1. 31全志r58平台Android4.4.2下打开USB摄像头

    31全志r58平台Android4.4.2下打开USB摄像头 2018/10/26 16:00 版本:V1.0 开发板:SC5806 1.系统编译:(略) 2.需要修改的文件: W:\r58_andr ...

  2. MATLAB调用USB摄像头实现过程

    使用USB Webcams包进行调用和打开 Matlab自身不支持直接读取摄像头数据,需要到Image Acquisition Toolbox Support Package中安装"MATL ...

  3. MATLAB调用USB摄像头的过程记录

    目录 01-测试USB摄像头是否正常工作 02-安装USB Webcams硬件支持包 03-调用系统中的USB摄像头 01-测试USB摄像头是否正常工作 首先将USB摄像头连接上电脑主机,然后通过Wi ...

  4. matlab打开笔记本摄像头_matlab-调用摄像头人脸识别

    ----------------------------边学边写边学习------------------------------------- 版本:2014a 调用摄像头 a = imaqhwin ...

  5. matlab打开笔记本摄像头_如何利用MATLAB实现摄像头视频获取和保存

    一.读取摄像头视频 如题目,首先你需要有一个摄像头(usb或者本本自带的都可以)并且安装好了驱动,保证设备可以正常使用. 先来段简单的通过MATLAB显示摄像头视频的代码: vid = videoin ...

  6. ffmpeg 打开USB摄像头

    usb摄像头的设备名称: (1)window下,可以通过命令查看ffmpeg -list_devices true -f dshow -i dummy 也可以直接在  设备管理器  中查看,例如: ( ...

  7. 【高分】ubuntu 、打开USB摄像头、Linux、USB摄像头驱动

    一.让系统可以识别到usb摄像头设备     打开终端,输入命令:ls /dev/v*,则可看到"/dev/video0",表示成功驱动摄像头. 如果没有的话,拔掉摄像头,重新插上 ...

  8. 使用openCV打开USB摄像头(UVC 小米micro接口)

    之前在AndroidStudio上就用了别人用写的库成功地打开了USB摄像头. 于是我之后又在PC上尝试了一下,首先去淘宝买了个MICRO母转USB公的转接口,然后在Qt上配置了一下OPENCV后开始 ...

  9. OpenCV 打开USB摄像头帧率低问题解决

    采用OpenCV对USB摄像头进行视频图像抓取时,如果图像帧抓取帧率低,可采用以下方式提高帧率. cv::VideoCapture camera_capture; camera_capture.ope ...

  10. matlab打开笔记本摄像头_如何解决笔记本电脑摄像头异常问题

    如果您遇到笔记本电脑相机异常问题(无法侦测视讯装置.视讯无画面.视讯画面异常.视讯画面颠倒等等),请参考以下疑难解答方式依序尝试. 提供应用程序权限 / 检查防病毒软件/ 更新Windows Upda ...

最新文章

  1. AI大牛周明打造的轻量“孟子模型”开源!靠10亿参数冲上CLUE榜第三,可用于新闻分类、文案生成...
  2. PHP/AJAX——登录页面与登录信息提示(非安全版本)
  3. 利用Conda尝鲜Python 3.10
  4. 读《图解HTTP》总结--第九章
  5. LC_ALL: cannot change locale (en_US.UTF8)问题解决
  6. php 面试靠快速排序,搞定PHP面试 - 常见排序算法及PHP实现
  7. MongoDB 事务,复制和分片的关系
  8. post报文给mqtt服务器没有响应,post请求转为mqtt的方法
  9. 迭代器,生成器,三元表达式,列表解析式
  10. asp和php漏洞,ASP_实例分析ASP上传漏洞入侵实战及扩展,【上传漏洞欺骗技术】 - phpStudy...
  11. Pyspider 框架的用法
  12. 网络公司网站源码介绍Version1.0
  13. 青云决最新服务器,青云决合区表
  14. 今日恐慌与贪婪指数为15 恐慌程度小幅上升
  15. 2022年lazada跨境店 新,马,泰,菲等4个国家正式开放食品类目招商
  16. python数据清洗笔记
  17. 记一次中国移动家用宽带设置成支持IPv6网络的经历
  18. Proteus中小圆圈引脚连线
  19. 如何系统学习LabVIEW?
  20. wince下更新NK软件(wince ghost V1)成功了

热门文章

  1. 中国网络游戏发展简史
  2. java 登陆拦截器_java 登录拦截器
  3. AMPL 简单运输模型
  4. 40亿个手机号码如何去重?
  5. 枚举算法典型的三个例子
  6. ARM汇编指令集与机器码
  7. 国军标-Gjb软件设计说明书模板
  8. 等宽字体与非等宽字体_我最喜欢的等宽字体
  9. 美团架构师带你深入理解Nginx模块开发与架构解析
  10. java 数据库连接 释放_JDBC连接数据库和释放连接