cv.VideoCapture()的摄像头ID究竟是如何编码的?为什么有的是从700开始编码??彻底读懂它!

背景

        最近在进行开发的时候,针对摄像头ID的问题总是让人恼火至极,有时候直接cv.VideoCapture(0)、cv.VideoCapture(1)就可以调用摄像头,有时候却需要cv.VideoCapture(700)或者cv.VideoCapture(701)才能调用摄像头。这给平台化开发带来了困难。

简述

        在使用OpenCV的cv.VideoCapture()函数的时候,后面跟着的的摄像头ID主要是为了指定需要捕获的视频源。

        实际上,这个摄像头ID并不是Opencv自己设定的,而是由操作系统和对应的摄像头硬件外设和之间的驱动程序决定的。

摄像头ID的编码规则

摄像头ID的编码规则有如下两种方式,一种是默认ID编码方式,一种的多外设编码方式,一种是非默认方式(700)开始

默认ID

通常为0,如果你的电脑有自己的摄像头,例如前置摄像头,那么直接使用cv.VideoCapture(0),调用的就是你的前置摄像头。

多摄像头编码方式

需要注意的是,对于电脑来说,会有多个外设:鼠标、键盘、摄像头、麦克风……这些外设是由操作系统统一使用设备管理机制来识别,但是并非简单的使用一个外设列表来管理。操作系统在识别外设的时候,流程如下:

  • 驱动程序加载
  • 设备枚举
  • 获取设备名称和标识符
  • 根据设备类型,分类设备ID

所以,我们的cv.VideoCapture()的摄像头ID仅仅是摄像头的id,这个id不会包含其他类型的外设。

所以在进行多摄像头的编码的时候,会采用从0开始逐一往后自增1的方式近编码。但是这很明显会导致一个问题:“后面摄像头的ID会被前面摄像头的拔插影响”。例如,对于一个摄像头ID为10的摄像头,前面的0~9摄像头的拔出、异常等都会使得该摄像头的编码发生变化,这对于多摄像头系统的调用和控制很不方便,毕竟一个摄像头出现问题,后面摄像头id直接向前补齐,然后代码又没变……想想都不合理。所以就带来了下面的方式

非默认编码方式(700开始)

为了解决多摄像头编码问题,我们很自然就能想到如下的解决方案:

可以让摄像头从一个id很大的地方开始编码,前面摄像头id无论如何拔插,都不影响该摄像头的调用和控制。那么一个常用的ID就是700,至于为什么选择这个数字,一来是这个数字足够大给默认多摄像头的编码留下足够空间,二来是这个数字又比较好记方便编码,个位十位都是0,很好平台化和编码。

总结

综上,摄像头的编码方式告一段落,希望可以给广大读者带来帮助。有何错漏也请评论让我知晓。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千天夜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值