Python OpenCV-更新实时网络摄像头视图的摄像头索引

Python OpenCV-更新实时网络摄像头视图的摄像头索引,python,opencv,webcam,Python,Opencv,Webcam,我正在观看网络摄像头的实时视频。我想将其整合到Tkinter GUI中,并提供一个下拉选择,允许您动态更改相机索引,从而更改正在使用的网络摄像头。 如何做到这一点 示例代码: import cv2 def show_webcam(mirror=False): cam = cv2.VideoCapture(0) while True: ret_val, img = cam.read() if mirror: img = c

我正在观看网络摄像头的实时视频。我想将其整合到Tkinter GUI中,并提供一个下拉选择,允许您动态更改相机索引,从而更改正在使用的网络摄像头。 如何做到这一点

示例代码:

import cv2

def show_webcam(mirror=False):
    cam = cv2.VideoCapture(0)
    while True:
        ret_val, img = cam.read()
        if mirror: 
            img = cv2.flip(img, 1)
        cv2.imshow('my webcam', img)
        if cv2.waitKey(1) == 27: 
            break  # esc to quit
    cv2.destroyAllWindows()

def main():
    show_webcam(mirror=True)

if __name__ == '__main__':
    main()

要在运行时更改摄影机,只需更改传入的索引
cv2.VideoCapture(索引)

了解应用程序将使用多少个摄像头,对于3个摄像头,可以通过将索引更改为0、1或2来更改

再添加一个参数作为索引
show\u网络摄像头(镜像=True,索引)

在函数端,您可以使用

def show_网络摄像头(镜像=False,索引):
cam=cv2.视频捕获(索引)
尽管如此:
ret_val,img=cam.read()
如果镜像:
img=cv2.flip(img,1)
cv2.imshow(“我的网络摄像头”,img)
如果cv2.waitKey(1)==27:
中断#退出

cv2.destroyAllWindows()

我很感激需要这样做-但我如何告诉程序停止执行show_webcam()功能并在不同索引下重新初始化摄影机视图?我在pyqt5下创建了相同的内容。我所做的是,我声明cam是self.cam,可以在课堂上的任何地方访问。因此,当我更改下拉列表以选择新摄像头时,我会将下拉索引作为输入发送到show_webcam功能。我使用下拉列表的on change事件获取下拉列表的新索引,并将其传递给show_webcam函数。这将更改新摄像头的设置,但在此之前,我通过self.cam.release()释放了以前的摄像头。