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

2024-09-03 13:12

本文主要是介绍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,很好平台化和编码。

总结

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

这篇关于cv.VideoCapture()的摄像头ID究竟是如何编码的?为什么有的是从700开始编码??彻底读懂它!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133047

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法