IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 通过Opencv打开指定摄像头的方法 -> 正文阅读

[人工智能]通过Opencv打开指定摄像头的方法

我们使用Opencv打开摄像头,一般是使用VideoCapture的open接口。

CV_WRAP virtual bool open(int index);

open接口要传入一个标识符,如果只有1个摄像机,那么就是0,如果系统中有多个摄像机,那么只要将其向上增加即可。

系统:

银河麒麟linux系统

问题:

现在我插入了一个双目摄像头(两个USB线,一个彩色,一个红外),那我就想打开彩色的,怎么办呢?每次我插入USB线,系统都会默认给设备分配一个video路径,例如 /dev/video3,根据插入USB线的顺序,每次分配的都不一样,这样通过open就不能指定打开哪一个。

解决思路:

每个设备都有自己的pid和vid,我要通过pid和vid找到特定的/dev/video,例如我获取到了路径 /dev/video3,那么取最后的数字3,通过open(3),即可打开指定的摄像头。需要使用libudev。

下面的函数是通过遍历所有的视频设备,再用摄像头的pid和vid与其对比,最后得到摄像头的路径。

int findCameraVideoPath(char *pid, char *vid, char *dpath)
{
  struct udev *udev = NULL;
  struct udev_enumerate *udev_enumerate = NULL;
  struct udev_list_entry *list_entry = NULL;
  int count = 0;
  int flag = 0;
  char devName[128]={0};

  udev = udev_new();
  if(udev == NULL)
  {
	//tips
    return 0;
  }
  udev_enumerate = udev_enumerate_new(udev);
  if(udev_enumerate == NULL)
  {
	//tips
    return 0;
  }

  udev_enumerate_add_match_subsystem(udev_enumerate, "video4linux");
  udev_enumerate_scan_devices(udev_enumerate);
  udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate))
 {
    struct udev_device *device;
    device = udev_device_new_from_syspath(udev_enumerate_get_udev(udev_enumerate), udev_list_entry_get_name(list_entry));
    if(device!=NULL)
    {
		//tips
            );

    if(udev_device_get_property_value(device, "ID_VENDOR_ID")!=NULL &&
           udev_device_get_property_value(device, "ID_MODEL_ID")!=NULL &&
           !strcmp(vid, udev_device_get_property_value(device, "ID_VENDOR_ID")) &&
           !strcmp(pid, udev_device_get_property_value(device, "ID_MODEL_ID")))
        {
        sprintf(devName,"/dev/video%s", udev_device_get_sysnum(device));
                flag = 1;
        count++;
        }
    udev_device_unref(device);

    }
    else
    {
        //tips
    }
  }

   if(flag!=0)
   {
      if(strlen(devName)>0)
        memcpy(dpath, devName, strlen(devName));
   }

    udev_enumerate_unref(udev_enumerate);
    udev_unref(udev);

    return flag;
}

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:23:58  更:2022-03-30 18:28:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:57:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码