cv2 图像显示在多线程时不起作用
cv2 image show doesn't work when multithreading
我正在尝试在捕获网络摄像头时将图像放在屏幕上(我正在使用 MAC)。因此,我启动了两个线程:一个用于捕获视频,另一个用于在屏幕上显示图像:
webcam_thread = self.init_webcam_thread()
images_thread = self.init_images_thread()
webcam_thread.start()
images_thread.start()
视频捕捉工作正常;当我不使用线程时图像显示正常工作(当这是唯一的过程时)。然而,当使用多线程时,所有内容都呈现在一个白框中,而不是图像本身。
这是图片代码:
for pic_idx , pic_name in enumerate(pics):
while True:
image = cv2.imread(pic_name, 0)
if image is not None:
cv2.imshow('image', image)
k = cv2.waitKey(2000)
同样,当我不使用多线程时——我所做的只是展示图片(没有视频捕捉),它工作得很好。可能是什么原因?
作为一般规则,您应该将与 UI 交互的任何代码保留在主线程上。您可能需要考虑使用队列,主线程从队列中拉取图像以显示它们,而其他线程在需要显示图像时将图像推入队列。
我正在尝试在捕获网络摄像头时将图像放在屏幕上(我正在使用 MAC)。因此,我启动了两个线程:一个用于捕获视频,另一个用于在屏幕上显示图像:
webcam_thread = self.init_webcam_thread()
images_thread = self.init_images_thread()
webcam_thread.start()
images_thread.start()
视频捕捉工作正常;当我不使用线程时图像显示正常工作(当这是唯一的过程时)。然而,当使用多线程时,所有内容都呈现在一个白框中,而不是图像本身。 这是图片代码:
for pic_idx , pic_name in enumerate(pics):
while True:
image = cv2.imread(pic_name, 0)
if image is not None:
cv2.imshow('image', image)
k = cv2.waitKey(2000)
同样,当我不使用多线程时——我所做的只是展示图片(没有视频捕捉),它工作得很好。可能是什么原因?
作为一般规则,您应该将与 UI 交互的任何代码保留在主线程上。您可能需要考虑使用队列,主线程从队列中拉取图像以显示它们,而其他线程在需要显示图像时将图像推入队列。