Python Opencv暴力获取所有相机

8 篇文章 0 订阅

没找到opencv如何一次性获取所有相机的办法,因此用了一种很流氓的办法:打开所有相机
因为opencv的相机列表是用number来访问的,所以只要从0开始遍历打开相机,只要打不开相机就停止
这个代码是应用在pyqt上的,点击获取按钮,然后会将数组添加到combobox列表中,就可以查看并选择相机了

from PyQt5 import QtCore, QtWidgets, QtGui, QtMultimedia
import cv2
from PyQt5.QtMultimedia import QMediaContent
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class MainUi(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainUi, self).__init__(parent)
        pass
        
    def getCameraList(self):
        """
        获取相机列表
        """
        num = 10
        try:
            index_list = []
            for i in range(0, num):
                cap = cv2.VideoCapture(i)
                if cap.isOpened():
                    index_list.append(i)
                    cap.release()
                else:
                    break
        except:
            msg_box = QtWidgets.QMessageBox
            msg_box.critical(self, 'error', '读取摄像机列表失败', msg_box.Ok)
            return -1
        if len(index_list) <= 0:
            msg_box = QtWidgets.QMessageBox
            msg_box.critical(self, 'error', '读取摄像机列表失败', msg_box.Ok)
            return -1
        return len(index_list)
        
    def button_check_camera_click(self):
        """
        点击按钮检查相机
        """
        self.camera_clear()
        index = self.getCameraList()
        if index == -1:
            return
        self.button_open_camera.setEnabled(True) # 打开相机按钮转为可触状态
        self.combobox_select_camera.addItems(list(map(lambda x: str(x) + '号摄像头', range(0, index)))) # 添加相机编号到Combobox中
        
	def button_open_camera_click(self):
        """
        打开选中的相机
        """
        if self.button_open_camera.text() == '关闭相机':
            self.button_open_camera.setText('打开相机')
            cv2.destroyAllWindows()
            if self.cap.isOpened():
                self.cap.release()
        else:
            try:
                CAM_NUM = int(self.combobox_select_camera.currentIndex())
                flag = self.cap.open(CAM_NUM)
                if not flag:
                    msg = QtWidgets.QMessageBox.warning(self, "Warning", "请检测相机与电脑是否连接正确",
                                                        buttons=QtWidgets.QMessageBox.Ok,
                                                        defaultButton=QtWidgets.QMessageBox.Ok)
                    return
                self.button_open_camera.setText('关闭相机')
                self.show_camera()
            except:
                return
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值