OpenCV获取摄像头编号及名称

2023-11-04

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

方法

OpenCV的VideoCapture是一个视频读取与解码的API接口,支持各种视频格式、网络视频流、摄像头读取。

针对一般摄像头的读取,opencv为了实现跨平台读取摄像头时是使用的摄像头索引

VideoCapture capture(int index);

一般而言电脑自带的摄像头id=0,但是也存在一些特殊情况,有些usb的摄像头接入笔记本后,usb摄像头的id会变位0,原有的笔记本id则变为1,所以为了程序的稳定性,最好还是使用图像采集设备的名称获取对应的id最后在使用opencv接口打开对应的设备(摄像头、视频采集卡…)。

代码

#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "windows.h"
#include "dshow.h"
#include <iostream>

#pragma comment(lib, "strmiids.lib")
#pragma comment(lib, "quartz.lib")

using namespace cv;
using namespace std;

int listDevices(vector<string>& list) {

    //COM Library Initialization
    //comInit();

    ICreateDevEnum *pDevEnum = NULL;
    IEnumMoniker *pEnum = NULL;
    int deviceCounter = 0;
    CoInitialize(NULL);

    HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
        CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
        reinterpret_cast<void**>(&pDevEnum));


    if (SUCCEEDED(hr))
    {
        // Create an enumerator for the video capture category.
        hr = pDevEnum->CreateClassEnumerator(
            CLSID_VideoInputDeviceCategory,
            &pEnum, 0);

        if (hr == S_OK) {

            printf("SETUP: Looking For Capture Devices\n");
            IMoniker *pMoniker = NULL;

            while (pEnum->Next(1, &pMoniker, NULL) == S_OK) {

                IPropertyBag *pPropBag;
                hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
                    (void**)(&pPropBag));

                if (FAILED(hr)) {
                    pMoniker->Release();
                    continue;  // Skip this one, maybe the next one will work.
                }

                // Find the description or friendly name.
                VARIANT varName;
                VariantInit(&varName);
                hr = pPropBag->Read(L"Description", &varName, 0);

                if (FAILED(hr)) hr = pPropBag->Read(L"FriendlyName", &varName, 0);

                if (SUCCEEDED(hr))
                {

                    hr = pPropBag->Read(L"FriendlyName", &varName, 0);

                    int count = 0;
                    char tmp[255] = { 0 };
                    //int maxLen = sizeof(deviceNames[0]) / sizeof(deviceNames[0][0]) - 2;
                    while (varName.bstrVal[count] != 0x00 && count < 255)
                    {
                        tmp[count] = (char)varName.bstrVal[count];
                        count++;
                    }
                    list.push_back(tmp);
                    //deviceNames[deviceCounter][count] = 0;

                    //if (!silent) DebugPrintOut("SETUP: %i) %s\n", deviceCounter, deviceNames[deviceCounter]);
                }

                pPropBag->Release();
                pPropBag = NULL;

                pMoniker->Release();
                pMoniker = NULL;

                deviceCounter++;
            }

            pDevEnum->Release();
            pDevEnum = NULL;

            pEnum->Release();
            pEnum = NULL;
        }

        //if (!silent) DebugPrintOut("SETUP: %i Device(s) found\n\n", deviceCounter);
    }

    //comUnInit();

    return deviceCounter;
}

int main()
{
    vector<string> list;
    listDevices(list);
    int capid0 = 0, capid1 = 0;
    cout << "dev_size =      " << list.size() << endl;
    for (int i = 0; i<list.size(); i++)
    {
        if (list[i] == "3D Camera")
            capid1 = i;
        if (list[i] == "USB2.0 HD UVC WebCam")
            capid0 = i;
        cout << "device lists:" << list[i] <<'\t'<<"i="<<i<< endl;

        if (list[i]=="CY3014 USB, Analog 01 Capture")
        {
            cout<<"video..."<<'\n';
        }
    }
    getchar();
    return 0;
}

结果

运行结果
涉及的配置:

opencv的环境不用说自己配置还有两个系统库,需要额外的添加 #pragma comment(lib, “strmiids.lib”) #pragma comment(lib, “quartz.lib”)

note:库存在64位和32位的区别,使用时需要和自己的项目位数相同(以上两个库一般系统都是自带的,不需要额外指定库路径,可以直接引用)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV获取摄像头编号及名称 的相关文章

  • 使用 OpenCV 和 Python 叠加两个图像而不丢失颜色强度

    如何叠加两个图像而不损失两个图像的颜色强度 我有图像1和图像2 2 我尝试使用 0 5 alpha 和 beta 但它给我的合并图像的颜色强度只有一半 dst cv2 addWeighted img1 0 5 img2 0 5 0 但是当我
  • 在 Python 中使用音频流 RTMP 通过管道和 OpenCV 到 FFmpeg

    我正在尝试使用音频流式传输 FFmpeg 我将在下面展示我的代码 导入模块 import subprocess as sp 创建变量 rtmpUrl rtmp a rtmp youtube com live2 key camera path
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 类型错误:只有长度为 1 的数组可以转换为 Python 标量

    我是 openCV 的初学者 正在尝试分析数独求解器的现有代码 有这一段代码会引发错误 samples np float32 np loadtxt feature vector pixels data responses np float3
  • 将向量 转换为大小为 (n x 3) 的 Mat,反之亦然

    我有 Point3d 向量 向量形式的点云 如果我使用 OpenCV 提供的转换 比如 cv Mat tmpMat cv Mat pts Here pts is vector
  • 如何将 Opencv VideoWriter 与 GStreamer 结合使用?

    我正在尝试使用 Opencv VideoWriter 传输 h264 流 以使用 VideoCapture 将其传输到网络上的另一台电脑上 但是 我被困在 VideoWriter 上 执行此代码会返回错误 并且 out isOpened 始
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • OpenCV OpenNI 校准kinect

    我使用 home 通过 kinect 进行捕捉 capture retrieve depthMap CV CAP OPENNI DEPTH MAP capture retrieve bgrImage CV CAP OPENNI BGR IM
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何填充接触图像边框的轮廓?

    假设我有以下从输出创建的二进制图像cv watershed 现在我想找到并填充轮廓 这样我就可以将相应的对象与原始图像中的背景 由分水岭函数分割 分开 为了分割图像并找到轮廓 我使用下面的代码 cv Mat bgr cv imread te
  • 我如何知道在 python 中使用 OpenCV 检测到的白色区域的位置?

    例如 在这段代码中 我过滤了视频源以显示白色区域 我如何知道他们的位置 坐标 x y import cv2 import numpy as np cap cv2 VideoCapture 0 while 1 frame cap read h
  • 如何使用 BoW 正确训练 OpenCV SVM

    我无法训练 SVM 识别我的对象 我正在尝试使用 SURF Bag Of Words SVM 来做到这一点 我的问题是分类器没有检测到任何东西 所有结果都是0 这是我的代码 Ptr
  • OpenCV argc 和 argv 混淆

    我正在检查一些 OpenCV 教程 并在开头找到了这一行 这是链接 代码位于 CalcHist 部分下http opencv willowgarage com documentation c histograms html http ope
  • 在opencv中找到物体的凸包?

    我是根据教程写的here http docs opencv org doc tutorials imgproc shapedescriptors hull hull html但我无法获得图像的凸包 我使用的是教程中所示的类似手部图像 我得到
  • OpenCV 从中心 x,y 绘制矩形

    我想仅使用中心点绘制一个矩形 所以在我的中心点周围几乎是一个矩形 最简单的方法是什么 谢谢 考虑到中心 x y then cv rectangle image cvPoint x w 2 y h 2 cvPoint x w 2 y h 2
  • 如何在 Keras Lambda Layer 中使用 OpenCV 函数?

    我正在尝试使用一个在图像上使用某些 OpenCV 函数的函数 但我得到的数据是张量 我无法将其转换为图像 def image func img img cv2 cvtColor img cv2 COLOR BGR2YUV img cv2 r
  • OpenCV 实时捕获桌面屏幕

    我正在使用 OpenCV 进行 C 编码项目 我在 OpenCV 中遇到一些限制 我想分析视频文件并检测某些对象 这工作得很好 但现在我希望它分析我的桌面屏幕的一部分 居住 有人知道如何实现这一点吗 我想过制作一个网络摄像头模拟器来捕获我的
  • 将黑白图像完全转换为一组线条(也称为仅使用线条进行矢量化)

    我有许多黑白图像 想将它们转换为一组线条 这样我就可以完全或至少接近完全地从线条重建原始图像 换句话说 我试图将图像矢量化为一组线条 我已经看过了霍夫线变换 https docs opencv org2 4 modules imgproc

随机推荐

  • 代码编辑器自带的基础html标签解析

    通过代码编辑器新建html文件时 会自动添加的基础代码的解析 这些基础代码就形成了Html文档的基础页面结构 定义整个html文档的开始和结束 定义html文档的头部信息区域 定义html文档的主体内容区域 Html文档的文档类型声明 说明
  • 优化算法的python实现——粒子群算法(PSO)

    粒子群算法 2023 6 13 版本 eval 函数 动态变量定义与调用 2023 6 11 版本 用处 用于优化连续非线性方程 特点 收敛速度快 参数少 算法简单 问题 可能陷入局部最优 我认为在中文互联网上找到的对于粒子群算法讲解得最详
  • 嵌入式C语言完全学习笔记(四)

    5 程序结构 在C语言程序里 一共有三种程序结构 顺序结构 选择结构 分支结构 循环结构 顺序结构 按照实物本身特性 必须一个接着一个来完成 选择结构 到某个节点后 会根据一次判断结果来决定之后走哪一个分支 循环结构 循环结构有一个循环体
  • Claude使用教程,解决Claude不能回复

    Claude是ChatGPT最为有 的竞争对 之 Claude 的研发公司是专注人工智能安全和研究的初创公司 Anthropic 由前 OpenAI 员工共同创立的 今年 3 月份 Anthropic 获得了谷歌 3 亿美元的投资 谷歌也因
  • Windows系统下C盘根目录常见文件夹

    C盘根目录常见文件夹 1 用户 Win7 Documents Settings XP 这里存储了用户的设置 包括用户文档 上网浏览信息 配置文件等数据 包括例如 Administrator All Users等文件夹 Administrat
  • 计算机软件系统崩溃,系统崩溃,解决系统崩溃的方法全集

    导致系统崩溃的原因有很多 但是无论是什么原因 我们都要找到解决它的方法 那么解决它的办法是什么呢 今天就让我们一起来看看吧 看看解决系统崩溃的解决方法全集 我们在使用电脑的时候 经常都是需要安装一些软件和其他东西的 但是在安装软件的时候 很
  • 单片机数码管段码详细介绍(显示1314520)

    前言 大一开始学C语言 上了一学期在班上相比算是入门了 可到圈子里一看我可能才走到门口吧 C语言从入门到重修我也是醉了 奈何环境就那样这里就不多说了 大学老师教的C语言嘛大家都明白的 段码 首先来说一下段码吧 单片机的一个数码管上有八个LE
  • c指针应用:键值对"key=value"字符串,在开发中经常使用

    要求写一个函数实现如下功能 要求1 自己定义一个接口 实现根据key获取value 要求2 编写测试用例 要求3 键值对中间可能有多个空格 请清除空格 键值对可能如下 key1 buf1 key2 buf2 key3 buf3 key4 b
  • R语言中的取整函数

    R语言中的取整函数 用来取整的四个函数 ceiling floor round trunc 注意四者的区别 ceiling 英文解释 ceiling takes a single numeric argument x and returns
  • 音视频剪辑 DIY:用 Python 快速入门音视频剪辑

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 在这个短视频和自媒体大行其道的年代 音视频剪辑成为了大佬们的必备工具 现在有很多音视频剪辑的软件 如剪映 Camtasia 爱拍剪辑
  • 软件分析笔记——数据流

    热烘烘的第三篇来啦 dbq 我看的太慢了 断断续续拖了好几天才看完了 这篇文章是B站南大 软件分析 课的第三节 第四节的总和 由于这两节课讲的都是数据流 有连贯性 就一起看做了笔记 再次要感谢南大的李越老师 讲的真的太仔细 太到位了 之前上
  • vulnhub靶机Me and My Girlfriend : 1-Writeup渗透测试

    一 信息收集 打开靶机后 先用netdiscover进行IP扫描 确定靶机IP为192 168 1 106后 扫描它的端口开放情况 namp sV A p 0 65535 192 168 1 106 发现靶机只开放了22和80端口 打开80
  • Matlab-SVM分类器

    支持向量机 Support Vector Machine SVM 可以完成对数据的分类 包括线性可分情况和线性不可分情况 1 线性可分 首先 对于SVM来说 它用于二分类问题 也就是通过寻找一个分类线 二维是直线 三维是平面 多维是超平面
  • Python出现TypeError: __init__() got an unexpected keyword argument ‘threshold‘

    可能是layoutparse版本下载错误 在PaddleOCR README ch md at release 2 3 PaddlePaddle PaddleOCR GitHub 下载正确版本
  • Python爬虫(九)

    scrapy框架 定义 异步处理框架 可配置和可扩展程度非常高 Python中使用最广泛的爬虫框架 安装 Ubuntu安装 1 安装依赖包 1 sudo apt get install libffi dev 2 sudo apt get i
  • 【Ubuntu】将Qt程序打包制作成deb

    1 打包Qt程序 1 1 下载linuxdeployqt 如果使用环境是x86可以直接下载 下载地址 https github com probonopd linuxdeployqt releases 如果使用环境是嵌入式 需要下载linu
  • 程序员面试题目:请实现一个函数,把字符串中的每个空格替换成"20"。

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1223 题目 请实现一个函数 把字符串中的每个空格替换成 20 例如输入 We are happy 则输出 We 20are 20happy
  • C语言系列:2、数据类型、运算符和表达式

    C语言系列 2 数据类型 运算符和表达式 文章目录 C语言系列 2 数据类型 运算符和表达式 1 前言 2 变量名 3 数据类型和长度 3 1 基本数据类型 3 2 short和long限定符 3 3 signed 与unsigned限定符
  • (三)运行微信小程序:在主页加入扫码组件

    制作了多个页面后 我们试图在小程序中添加些其他功能 比如实现扫码功能 1 在二维码生成网站上 生成一张二维码或条形码照片 百度 二维码生成 即可找到生成网站 这里我们使用 2023你好吗 数字加文字的形式生成如下二维码 并保存到本地 供后续
  • OpenCV获取摄像头编号及名称

    欢迎使用Markdown编辑器 你好 这是你第一次使用 Markdown编辑器 所展示的欢迎页 如果你想学习如何使用Markdown编辑器 可以仔细阅读这篇文章 了解一下Markdown的基本语法知识 方法 OpenCV的VideoCapt