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

相关文章

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &