python实现获取所有可用摄像头(id+名称)可用于opencv

 更新时间:2026年01月21日 14:24:30   作者:babybin  
本文介绍了PyCameraListProject,这是一个用于解决OpenCV库中VideoCapture调用摄像头时无法直接通过名称选择摄像头问题的库,它支持Python 3.6至3.10的64位Windows版本,并提供测试代码

缘起

python下使用opencv库使用VideoCapture调用摄像头时,只能传入枚举号,而不知道相应的相机名称。电脑有多个摄像头时,选择摄像头就会很不方便;电脑只有一个摄像头 时有时摄像头的ID也不一定是0。

我们希望能够获取所有CV可以使用的摄像头信号源。

这个库的目的就是为解决这个问题而生。当前python3.6, 3.7, 3.8, 3.9, 3.10的64位win版本可以直接pip安装。

pip install pycameralist

有需要源码的也可以从我的gitee项目拉取。PyCameraListProject

测试代码1

#!/usr/bin/env python
# coding=utf-8

from PyCameraList.camera_device import test_list_cameras, list_video_devices, list_audio_devices

cameras = list_video_devices()
print(dict(cameras))
#return: {0: 'Intel(R) RealSense(TM) 3D Camera (Front F200) RGB', 1: 'NewTek NDI Video', 2: 'Intel(R) RealSense(TM) 3D Camera Virtual Driver', 3: 'Intel(R) RealSense(TM) 3D Camera (Front F200) Depth', 4: 'OBS-Camera', 5: 'OBS-Camera2', 6: 'OBS-Camera3', 7: 'OBS-Camera4', 8: 'OBS Virtual Camera'}
 
audios = list_audio_devices()
print(dict(audios))
#return:  {0: '麦克风阵列 (Creative VF0800)', 1: 'OBS-Audio', 2: '线路 (NewTek NDI Audio)'}

测试代码2

#!/usr/bin/env python
# coding=utf-8

from PyCameraList.camera_device import test_list_cameras, list_video_devices, list_audio_devices
import cv2 as cv


def show_in_cv(camera_id):
    cap = cv.VideoCapture(camera_id, cv.CAP_DSHOW)
    cap.set(cv.CAP_PROP_FRAME_WIDTH, 960)
    cap.set(cv.CAP_PROP_FRAME_HEIGHT, 540)
    cap.set(cv.CAP_PROP_FPS, 30)
    i = 0
    while True:
        suc, frame = cap.read()
        if not suc:
            break
        cv.imshow("preview camera", frame)
        cv.waitKey(30)
        i += 1
    return


def main():
    cameras = list_video_devices()
    print(f'\n\n===========================\ncamera_list: {cameras}')
    idx = 1
    camera_id = cameras[idx][0]
    camera_name = cameras[idx][1]
    print(f'\n\n===========================\npreview camera: camera_id={camera_id} camera_name={camera_name}')
    show_in_cv(camera_id)


if __name__ == '__main__':
    main()

 效果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 爬虫使用IP来隐藏真实地址的过程(python示例)

    爬虫使用IP来隐藏真实地址的过程(python示例)

    这篇文章主要为大家介绍了爬虫使用IP来隐藏真实地址的过程(python示例)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Python中的is和==比较两个对象的两种方法

    Python中的is和==比较两个对象的两种方法

    这篇文章主要介绍了Python中的is和==比较两个对象的两种方法的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • PyTorch中torch.utils.data.DataLoader简单介绍与使用方法

    PyTorch中torch.utils.data.DataLoader简单介绍与使用方法

    DataLoader是PyTorch中读取数据的一个重要接口,基本上用PyTorch训练模型都会用到,下面这篇文章主要给大家介绍了关于PyTorch中torch.utils.data.DataLoader简单介绍与使用方法的相关资料,需要的朋友可以参考下
    2022-06-06
  • python文件操作的基础详细讲解(write、read、readlines、readline)

    python文件操作的基础详细讲解(write、read、readlines、readline)

    使用python来读写文件是非常简单的操作,下面这篇文章主要给大家介绍了关于python文件操作的基础详细资料,包括write、read、readlines、readline等相关操作,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • pyqt5对用qt designer设计的窗体实现弹出子窗口的示例

    pyqt5对用qt designer设计的窗体实现弹出子窗口的示例

    今天小编就为大家分享一篇pyqt5对用qt designer设计的窗体实现弹出子窗口的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 一文了解Python中NotImplementedError的作用

    一文了解Python中NotImplementedError的作用

    NotImplementedError是一个内置异常类,本文主要介绍了一文了解Python中NotImplementedError的作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python中的enumerate函数示例详解

    Python中的enumerate函数示例详解

    enumerate 是一个非常有用的函数,它允许你在迭代过程中方便地获取元素及其对应的索引,使代码更简洁、更Pythonic,这篇文章主要介绍了Python中的enumerate函数示例详解,需要的朋友可以参考下
    2023-08-08
  • django restframework使用redis实现token认证

    django restframework使用redis实现token认证

    本文主要介绍了django restframework使用redis实现token认证,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Anaconda中导出环境的实现步骤

    Anaconda中导出环境的实现步骤

    在 Anaconda 中导出环境是一种常用的做法,可以将当前的环境配置导出到一个文件中,本文主要介绍了Anaconda中导出环境的实现步骤,具有一定的参考价值
    2024-05-05
  • Python结合多线程与协程实现高效异步请求处理

    Python结合多线程与协程实现高效异步请求处理

    在现代Web开发和数据处理中,高效处理HTTP请求是关键挑战之一,本文将结合Python异步IO(asyncio)和多线程技术,探讨如何优化请求处理逻辑,解决常见的线程事件循环问题,有需要的小伙伴可以根据需求进行选择
    2025-04-04

最新评论