use*_*931 10 python opencv image-processing freeze imshow
对于我的图像处理算法,我使用的是python/OpenCV.我的算法输出应该在同一个窗口一遍又一遍地更新.
然而,有时窗口冻结并且根本不更新,但算法仍在运行并且同时多次更新图片.在这台Ubuntu机器上,窗口变成深灰色.
以下是相关代码的摘录:
for i in range(0,1000):
img = loadNextImg()
procImg = processImg(img)
cv2.imshow("The result", procImg)
cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)
注意:processImg()程序大约需要1-2秒.该行在cv2.imshow(procImg)第一个实例中创建窗口(即没有先前的调用)
增加等待时间可以解决此问题.但是在我看来,这是不必要的睡眠时间(20毫秒/帧),即使它并不多.
更改
cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)
至
cv2.waitKey(20)
Run Code Online (Sandbox Code Playgroud)
在我的情况下防止窗户冻结.所需的等待时间的持续时间可能因机器而异.
我的建议是使用Matplotlib pyplot来显示图像.我这样做的方式如下.
import matplotlib.pyplot as plt
# load image using cv2....and do processing.
plt.imshow(cv2.cvtColor(image, cv2.BGR2RGB))
# as opencv loads in BGR format by default, we want to show it in RGB.
plt.show()
Run Code Online (Sandbox Code Playgroud)
我知道它不能解决cv2.imshow的问题,但它解决了我们的问题.
所以我认为这里发生的是,窗口(highGUI 的一个元素)在第一次调用 imshow 后仍然处于活动状态,正在等待 waitKey 函数的某种响应,但由于程序而变得不活动被困在 loadNextImg 函数的 processImg 中进行计算。如果您不关心效率的轻微浪费(即您不是在每个操作都很重要的嵌入式系统上运行),您应该在 waitKey 之后销毁窗口,并在 imshow 之前重新创建。由于在处理和加载图像期间窗口不再存在,因此 highGUI 不会卡住等待 waitKey 的调用,并且不会变得无响应。
| 归档时间: |
|
| 查看次数: |
10725 次 |
| 最近记录: |