【发布时间】:2016-08-30 12:48:18
【问题描述】:
对于我的图像处理算法,我使用的是 python/OpenCV。我的算法的输出将在同一个窗口中一遍又一遍地更新。
但有时窗口会冻结并且根本不更新,但算法仍在运行并在此期间多次更新图片。在这台 Ubuntu 机器上,窗口变成深灰色。
以下是相关代码的摘录:
for i in range(0,1000):
img = loadNextImg()
procImg = processImg(img)
cv2.imshow("The result", procImg)
cv2.waitKey(1)
注意:processImg() 的过程大约需要 1-2 秒。 cv2.imshow(procImg) 行在第一个实例中创建窗口(即没有前面的调用)
【问题讨论】:
-
实际上是
cv2.waitKey为 GUI 工作提供消息。它需要足够频繁地调用,以便 UI 真正响应所有必要的事件(如重绘等)。如果处理需要这么长时间,并且您希望同时拥有响应式 UI,则需要在单独的线程中进行处理。 -
@DanMašek 在一个按顺序工作的单线程程序中,我希望在当前任务完成后首先执行另一个命令(在这种情况下更新图像)。感谢您提供有关线程的提示,但老实说,这使得它变得不必要的复杂
-
如果你不想处理线程(虽然这不是我认为复杂的,但我理解 YMMV),另一种可能性是提供某种方式来泵送消息(调用waitKey)在您进行处理时(在各个步骤之间)。它会很笨拙,但至少这样窗口会保持相当响应。
标签: python opencv image-processing freeze imshow