2

我目前正在使用 Tkinter 和 PIL 在 python 中创建一个图像查看器,但我希望图像加载更快。因此,我想知道如何安装和使用带有 Tkinter 和 PIL 的 Libjpeg Turbo,或者即使我应该使用不同的 GUI 工具包,如 pyQT 或不同的成像库(我发现了一个叫做 OpenCV 的东西?)。

那么基本上我可以在 python 中加载、调整大小和显示大图像的最好和最快的方法是什么?

编辑:我认为主要瓶颈是图像大小调整,它是可见的,但在此之前它是图像加载本身。我不能确定,因为我不知道如何衡量这样的东西,因为我本质上是一个 python 新手。

而我所做的基本上是一个简约的图像查看器。如果您想查看我的代码,请点击此处: http: //pastebin.com/fwf8b0cU

编辑 2:我已经通过 cProfile 运行了一堆并修复了一些代码,并修复了一些缓慢。所以现在我的问题本质上是我应该使用另一个 GUI 工具包,比如 pyQT 还是不同的成像库(我发现了一个叫做 OpenCV 的东西?)。

4

3 回答 3

1

如果您想缩小瓶颈的来源,我将从对您的各个代码部分调用timeit开始。如果这没有帮助或看起来太费劲,请查看Python Profilers

于 2011-09-08T22:45:46.763 回答
1

您可能会看一下PyTurboJPEG,它是libjpeg-turbo的 Python 包装器,在解码大型 JPEG 图像时具有非常快速的重新缩放(1/2、1/4、1/8)。

from turbojpeg import TurboJPEG

# specifying library path explicitly
# jpeg = TurboJPEG(r'D:\turbojpeg.dll')
# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')
# jpeg = TurboJPEG('/usr/local/lib/libturbojpeg.dylib')

# using default library installation
jpeg = TurboJPEG()

# direct rescaling 1/2 while decoding input.jpg to BGR array
in_file = open('input.jpg', 'rb')
bgr_array_half = jpeg.decode(in_file.read(), scaling_factor=(1, 2))
in_file.close()
于 2018-01-13T12:05:28.050 回答
0

老问题,但这里的答案不包括将它与 PIL 一起使用

下面的线程解释了很多,但简短的版本是:

conda uninstall -y --force pillow pil jpeg libtiff libjpeg-turbo
pip   uninstall -y         pillow pil jpeg libtiff libjpeg-turbo
conda install -yc conda-forge libjpeg-turbo
CFLAGS="${CFLAGS} -mavx2" pip install --upgrade --no-cache-dir --force-reinstall --no-binary :all: --compile pillow-simd
conda install -y jpeg libtiff

来自:https ://docs.fast.ai/performance.html#faster-image-processing

不过,它似乎只适用于 Linux。在 MacOS X 上,Pillow-SIMD 构建似乎没有正确链接到 libjpeg-turbo 库。

无论如何,一旦在本地编译,pillow-simd 会替换 PIL,您将获得 libjpeg-turbo 和 simd 的加速

于 2020-08-06T15:27:34.333 回答