cv2图像显示不起作用

cv2图像显示不起作用

本文介绍了多线程处理时,cv2图像显示不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在捕获网络摄像头时将图像显示在屏幕上(我正在使用MAC)。因此,我启动了两个线程:一个用于捕获视频,另一个用于在屏幕上呈现图像:

I am trying to put images on screen while capturing webcam (I'm using MAC). Hence, I started two thread: one for capturing video, the other for presenting images on screen:

    webcam_thread = self.init_webcam_thread()
    images_thread = self.init_images_thread()

    webcam_thread.start()
    images_thread.start()

视频捕获正常运行;当我不使用线程时(这是唯一的过程),图像显示正常工作。但是,使用mutli-Threading时,所有内容均显示在白框中,而不显示图像本身。
这是图像代码:

The video capture is working correctly; The image show is working correctly while I'm not using thread (When this is the only process). However, when using mutli-Threading, all presented in a white box and not the image itself.This is the image code:

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)

同样,当我不使用多线程时,我所做的只是展示图片(没有视频捕获),它运行良好。可能是什么原因?

Again, when I'm not using Multi-Thread - and all I do is presenting the pic (without the video capture) it is working perfectly. What might be the reason?

推荐答案

作为一般规则,应保留与主线程上的UI交互的所有代码。您可能要考虑使用队列,主线程从队列中拉出图像以显示图像,而其他线程则在希望显示图像时将图像推入队列。

As a general rule, you should keep any code which interacts with UI on the main thread. You might want to consider using a Queue, with the main thread pulling images from the Queue to imshow them, and other threads pushing the images into the queue when they want them shown.

这篇关于多线程处理时,cv2图像显示不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 19:14