В настоящее время я создаю средство просмотра изображений в python с использованием Tkinter и PIL, но я хочу, чтобы загрузка изображений была быстрее. Поэтому я хотел бы знать, как я могу установить и использовать Libjpeg Turbo с Tkinter и PIL, или даже если я должен использовать другой набор инструментов GUI, например pyQT или другую библиотеку изображений (я нашел что-то под названием OpenCV?).
Итак, по сути, какой самый лучший и быстрый способ я могу загрузить, изменить размер и отобразить большое изображение в python?
EDIT: Я считаю, что основным узким местом является изменение размера изображения, это видно, но до этого это сама загрузка изображения. Я не могу точно сказать, потому что я не знаю, как измерить такую вещь, как я, по сути, python newb.
И то, что я делаю, в основном является минималистичным средством просмотра изображений. Если вы хотите увидеть мой код, он находится здесь: http://pastebin.com/fwf8b0cU
EDIT 2: я пропустил cProfile, куча и исправил некоторый код, и исправил некоторую медлительность. Итак, теперь мой вопрос заключается в том, что я должен использовать другой инструментарий GUI, например pyQT или другую библиотеку изображений (я нашел что-то под названием OpenCV?).
Если вы хотите сузить источник узкого места, я начну с некоторых вызовов timeit на ваших различных разделах кода. Если это не поможет или кажется слишком много усилий, посмотрите на Python Profilers
Вы можете взглянуть на 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()