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

相关文章

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 模块(安全敏感场景)方法

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

一文彻底搞懂Java 中的 SPI 是什么

《一文彻底搞懂Java中的SPI是什么》:本文主要介绍Java中的SPI是什么,本篇文章将通过经典题目、实战解析和面试官视角,帮助你从容应对“SPI”相关问题,赢得技术面试的加分项,需要的朋... 目录一、面试主题概述二、高频面试题汇总三、重点题目详解✅ 面试题1:Java 的 SPI 是什么?如何实现一个