【问题标题】:How to switch between camera interactively with OpenCV?如何与 OpenCV 交互地在相机之间切换?
【发布时间】:2020-12-01 12:11:48
【问题描述】:

我想在连接到计算机的相机之间切换。我有 PyQt5 列表项和其中列出的所有相机。所以我也有相机索引。但是,我无法以交互方式在相机之间成功切换。当在列表中选择了一个新相机时,我按下“REFRESH”按钮以在 PyQt 标签上显示选定的相机流。如何在相机之间切换?

我使用以下代码显示流并在它们之间切换:

-参考:https://stackoverflow.com/a/44404713/13080899

class Stream_Thread(QThread):
changePixmap = pyqtSignal(QImage)

def __init__(self):
    super(Stream_Thread, self).__init__()
    self.ref = False        #refresh flag

def set_index(self, index = 0):
    self.index = index

def refresh(self):
    self.ref = True

def run(self):
    capt = cv2.VideoCapture(self.index, cv2.CAP_DSHOW)

    while(True):
        ret, frame = capt.read()

        if ret:
            rbgImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            h, w, ch = rbgImage.shape
            bytesPerLine = ch*w
            convertToQtFormat = QImage(rbgImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
            p = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)
            self.changePixmap.emit(p)

        if self.ref:
            break

    capt.release()

“刷新”按钮方法。

    def button_refresh_clicked(self, th):
    curr_id = self.get_cam_id()
    th.refresh()
    
    th = Stream_Thread()
    th.set_index(curr_id)
    th.start()

【问题讨论】:

    标签: python qt opencv pyqt pyqt5


    【解决方案1】:

    我找到了正确的方法。终止当前线程,设置视频捕获索引并重新启动线程:

    def button_refresh_clicked(self, th):
        curr_id = self.get_cam_id()
        th.terminate()
    
        th.set_index(curr_id)
        th.start()
    

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2021-05-20
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多