项目上需要用到读取摄像头的帧数据,在对视频帧做算法处理。简单了解了一下摄像头的分类和如何读取。
1、总体上来说,在win平台下面摄像头数据采集无外乎两种方式vfw和direct show。其中vfw是不依赖于sdk的,只要有系统api即可实现摄像头数据的采集,属于早期常用的视频采集库;而direct show则是需要配合direct x的sdk才可以使用,一般用于wdm驱动的usb摄像头。在Windows下用DirectShow采集摄像头图像比OpenCV效率要高一些,但是很麻烦。
opencv本身有一些API函数可以进行USB相机的读取,是调用了windows 底层的vfw模块opencv自带的相机捕获模块,仅仅适用于usb接口的普通QQ视频摄像头;对专业性很强的相机很可能用不了,要借助于相机的SDK;
2、免驱摄像头:无需安装相关硬件驱动,插入设备直接自动识别并正常运行;
驱动摄像头:连接好设备后需要通过“驱动光盘”或者联网检测下载相关驱动方可运行。免驱的意义在于硬件兼容性良好,无繁杂设置与安装,可以快速运行使用摄像头。
3、UVC USB Video Class
uvc是一种标准的USB视频设备协议,就是传说中的免驱摄像头。将符合标准的摄像头链接到符合标准的操作系统,系统就会自动为其安装驱动并进行设置,使摄像头实现真正意义上的即插即用。
4、现在绝大多数摄像头所采用的是免驱摄像头,一般有两种传输格式,YUY2和MJPG,前者是无压缩图像格式的视频,系统资源占用少(因为不用解码),不需要解码器,缺点是帧率稍慢(受限于USB分配的带宽),后者是相当于JPEG图像压缩格式,优点是帧率高(视频开启快,曝光快),缺点是影像有马赛克,并且需要解码器,会占用PC系统资源。
最终用的是opencv的函数读取usb免驱摄像头。