如何使用 OpenCV 在相机之间进行交互切换?
How to switch between camera interactively with OpenCV?
我想在连接到计算机的相机之间切换。我有 PyQt5 列表项和其中列出的所有相机。所以我也有相机索引。但是,我无法成功地以交互方式在相机之间切换。当在列表中选择了一个新相机时,我按下“REFRESH”按钮以在 PyQt 标签上显示所选相机流。如何切换相机?
我使用以下代码显示流并在它们之间切换:
-参考:
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()
我找到了正确的方法。终止当前线程,设置视频采集索引,重新启动线程:
def button_refresh_clicked(self, th):
curr_id = self.get_cam_id()
th.terminate()
th.set_index(curr_id)
th.start()
我想在连接到计算机的相机之间切换。我有 PyQt5 列表项和其中列出的所有相机。所以我也有相机索引。但是,我无法成功地以交互方式在相机之间切换。当在列表中选择了一个新相机时,我按下“REFRESH”按钮以在 PyQt 标签上显示所选相机流。如何切换相机?
我使用以下代码显示流并在它们之间切换:
-参考:
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()
我找到了正确的方法。终止当前线程,设置视频采集索引,重新启动线程:
def button_refresh_clicked(self, th):
curr_id = self.get_cam_id()
th.terminate()
th.set_index(curr_id)
th.start()