gpt4 book ai didi

python - PIL.ImageTk.PhotoImage() 性能不一致

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:22 26 4
gpt4 key购买 nike

我正在将 numpy 数组(使用 OpenCV 加载的网络摄像头素材)转换为 Tkinter PhotoImage 对象以在 Tkinter GUI 上显示它们。但是,函数 PIL.ImageTk.PhotoImage() 经历了大约 800 毫秒的峰值,导致帧速率严重下降。这是片段:

ar = Image.fromarray(frame)
itk = ImageTk.PhotoImage(ar) # *
lbl = Label()
lbl.configure(image=itk)
lbl.image = itk

我测量了标有*的行的执行时间:

Number of runs: 72
Total duration: 11.97 seconds
Longest run: 967.05 milliseconds
Shortest run: 1.03 milliseconds
Average run: 166.25 milliseconds
Median run: 1.2 milliseconds
Standard deviation: 315.63 milliseconds

此外,这是性能图: ImageTk.PhotoImage() performance

图像的像素数始终相同,我无法生成性能持续较低的条件。

关于如何防止尖峰的任何想法?如果可以预测,跳帧不是问题。

PIL 版本 4.0.0OpenCV 版本 3.0.0Numpy 版本 1.12.0Python版本:2.7.12

最佳答案

虽然我没有找出原因或解决此问题,但我找到了一种解决方法,可以让我在不经常卡住的情况下获得合理的性能。该解决方案分为两部分:

1) 每个捕获的帧都像以前一样转换为 ImageTk.PhotoImage 对象。然而,我也测量了这个操作的持续时间。如果花费的时间超过 100 毫秒,则框架未在 GUI 中更新。

2) 捕获帧时,将启动一个新线程来更新 GUI 图像。这允许更新新捕获的帧,即使遇到有问题的长延迟也是如此。这些延迟的图像不会在 GUI 上显示,从而导致一些丢失的帧,这些帧将很快被下一帧替换。这是可行的,因为大多数时候转换速度非常快。

关于python - PIL.ImageTk.PhotoImage() 性能不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42737699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com