我正在将numpy数组(加载了OpenCV的网络摄像机镜头)转换成Tkinter PhotoImage对象,以在Tkinter GUI上显示它们。{{800>在cdms>帧中经历严重的速率下降。以下是片段:
ar = Image.fromarray(frame)
itk = ImageTk.PhotoImage(ar) # *
lbl = Label()
lbl.configure(image=itk)
lbl.image = itk
我测量了用*
标记的行的执行时间:
图像的像素计数总是相同的,我无法生成性能始终较低的条件。在
有什么办法防止尖峰?如果可以预测,跳过帧也不是问题。在
PIL版本4.0.0 OpenCV 3.0.0版 Numpy 1.12.0版 Python版本:2.7.12
虽然我没有找到原因或解决办法,但我找到了一个解决办法,让我有一个合理的性能,而不是不断冻结。此解决方案包括两部分:
1)每个捕获的帧都像以前一样转换成
ImageTk.PhotoImage
对象。但是,我也测量了这个操作的持续时间。如果花费的时间超过100毫秒,则该帧不会在GUI中更新。在2)当捕捉到帧时,会启动一个新线程来更新GUI图像。这使得新捕获的帧即使在面临有问题的长延迟时也能被更新。这些延迟的图像将不会显示在GUI上,导致一些丢失的帧,这些帧将被下一帧快速替换。这是因为大多数情况下转换非常快。在
相关问题 更多 >
编程相关推荐