【问题标题】:Program execution freezes when using a different thread to imshow Image [duplicate]使用不同的线程显示图像时程序执行冻结[重复]
【发布时间】:2020-08-05 11:57:32
【问题描述】:

下面的代码 sn-p 一个接一个地显示相同的图像

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我除了下面的代码 sn-p 以同样的方式工作

def show():
    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

thread = threading.Thread(target = show)
thread.start()
thread.join()

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

但第二个imshow 语句似乎存在某种问题。我使用打印语句发现程序在第二个imshow 语句处冻结。谁能告诉我为什么会这样?

编辑:

我在网上发现很少有类似的问题,大部分都说cv2.imshow 应该只用于主线程。我猜 cv2.imshow 仅适用于一个线程,无论是主线程还是您创建的任何其他线程。在任何其他线程中调用此方法将冻结执行。

【问题讨论】:

    标签: python-3.x multithreading cv2 opencv-python


    【解决方案1】:

    关于 Open CV 官方文档:

    cv2.waitKey() 是一个键盘绑定函数。它的参数是以毫秒为单位的时间。该函数等待任何键盘事件的指定毫秒。如果您在那段时间内按任意键,程序将继续。 如果传递了 0,它会无限期地等待击键。 也可以设置它来检测特定的击键,例如,如果按键 a 被按下等,我们将在下面讨论.

    另一个重要提示:

    • 您可以创建任意数量的窗口,但使用不同的窗口 名字。
    • 另外将击键传递给线程模块并不好 由于 GIL(全局解释器锁),特别是在 windows 上练习 约束。

    【讨论】:

    • 我知道 waitKey 是如何工作的,这不是问题所在。你介意试试我的代码 sn-ps 看看有什么错误吗?
    猜你喜欢
    • 2020-01-18
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2018-02-26
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多