当前位置: 代码网 > it编程>前端脚本>Python > python实现获取所有可用摄像头(id+名称)可用于opencv

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

2026年01月21日 Python 我要评论
缘起python下使用opencv库使用videocapture调用摄像头时,只能传入枚举号,而不知道相应的相机名称。电脑有多个摄像头时,选择摄像头就会很不方便;电脑只有一个摄像头 时有时摄像头的id

缘起

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()

 效果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com