Быстрая загрузка и отображение изображений в Python (Использование Libjpeg Turbo в Python?) - PullRequest
2 голосов
/ 09 сентября 2011

В настоящее время я создаю средство просмотра изображений в Python, используя Tkinter и PIL, но я хочу, чтобы загрузка изображений была быстрее. Поэтому я хотел бы знать, как я мог бы установить и использовать Libjpeg Turbo с Tkinter и PIL, или даже если бы мне пришлось использовать другой инструментарий GUI, такой как pyQT или другую библиотеку изображений (я нашел что-то под названием OpenCV?).

Итак, какой же самый лучший и быстрый способ загрузки, изменения размера и отображения большого изображения в python?

EDIT: Я считаю, что основным узким местом является изменение размера изображения, оно видно, но до этого это сама загрузка изображения. Хотя я не могу сказать наверняка, потому что я не знаю, как измерить такую ​​вещь, потому что я, по сути, новичок в питоне.

А то, что я делаю, - это в основном минималистичный просмотрщик изображений. Если вы хотите увидеть мой код, он здесь: http://pastebin.com/fwf8b0cU

РЕДАКТИРОВАТЬ 2: Я пробежал через cProfile кучу и исправил некоторый код, и исправил некоторую медленность. Поэтому теперь мой вопрос заключается в том, стоит ли мне использовать другой инструментарий GUI, такой как pyQT, или другую библиотеку изображений (я нашел что-то под названием OpenCV?).

Ответы [ 2 ]

1 голос
/ 13 января 2018

Вы можете взглянуть на PyTurboJPEG , который является оболочкой Python libjpeg-turbo с безумно быстрым масштабированием (1/2, 1/4, 1/8) при декодировании большое изображение JPEG.

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()
1 голос
/ 09 сентября 2011

Если вы хотите сузить источник узкого места, я бы начал с некоторых вызовов timeit в различных разделах кода. Если это не помогает или кажется слишком большим усилием, загляните в Python Profilers

...