1

我目前在使用Tkinter和PIL創建圖像查看器,但我希望圖像加載速度更快。因此,我想知道如何在Tkinter和PIL上安裝和使用Libjpeg Turbo,或者即使我使用不同的GUI工具包,如pyQT或其他圖像庫(我找到了一種名爲OpenCV的東西?)。在Python中快速加載和顯示圖像(在Python中使用Libjpeg Turbo?)

那麼本質上是什麼是我可以加載,調整大小,並在python中顯示大圖像的最好和最快的方式?

編輯: 我認爲主要瓶頸是圖像大小調整,它是可見的,但在此之前它是圖像加載本身。我無法確定,因爲我不知道如何衡量這樣的事情,因爲我本質上是一個Python newb。

而我所做的基本上是一個簡約的圖像查看器。如果你想看到我的代碼它在這裏:http://pastebin.com/fwf8b0cU

編輯2:我已經通過cProfile一堆,並修復了一些代碼,並修復了一些緩慢。所以現在我的問題基本上應該是使用另一個GUI工具包,如pyQT或不同的圖像庫(我發現了一些名爲OpenCV?)。

+2

你能告訴我們實際的瓶頸是什麼嗎?你測量過你的代碼,看看哪個函數是慢的嗎? – jterrace

+1

^^這並描述你想要做的更多一點:P QT可能對於python中的圖像查看有些過分,但它對於GUI的東西非常棒! (我用了很多)。 – tylerthemiler

+0

好吧,看編輯:D。 – Alex

回答

1

如果你想縮小瓶頸的來源,我會開始在你的代碼的各個部分撥打timeit。如果它不能幫助或似乎有太多的精力,看看到Python Profilers

+1

我剛剛嘗試過使用timeit,但是我遇到了一些麻煩,因爲它都是面向類的,與自我相關的問題等:/ – Alex

+0

嘗試使用分析或從GUI中分離出圖像處理位並單獨進行測試。這至少會讓你知道調整圖像需要多長時間。 –

+0

我強烈建議cProfile/pstats。 timeit沒有提供足夠的粒度。 – jterrace

0

您不妨來看看在PyTurboJPEG這是libjpeg-turbo用Python包裝出奇的快重新換算(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()