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

1

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

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

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

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

EDIT 2: я пропустил cProfile, куча и исправил некоторый код, и исправил некоторую медлительность. Итак, теперь мой вопрос заключается в том, что я должен использовать другой инструментарий GUI, например pyQT или другую библиотеку изображений (я нашел что-то под названием OpenCV?).

  • 2
    Можете ли вы сказать нам, что же такое узкое место? Вы измерили свой код, чтобы увидеть, какая функция медленная?
  • 1
    ^^ Это и опишите, что вы пытаетесь сделать немного больше: P QT может быть излишним для просмотра изображений в python, но отлично подходит для графического интерфейса! (Я часто этим пользуюсь).
Показать ещё 1 комментарий
Теги:
image-processing
tkinter
python-imaging-library
libjpeg

2 ответа

1

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

  • 1
    Я только что попытался использовать timeit, но у меня есть некоторые проблемы, потому что все это ориентировано на класс, проблемы с собой и тому подобное: /
  • 0
    Попробуйте затем профилирование или выньте биты обработки изображений из графического интерфейса и протестируйте их изолированно. Это, по крайней мере, даст вам представление о том, сколько времени требуется, чтобы изменить размеры изображений.
Показать ещё 2 комментария
0

Вы можете взглянуть на 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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню