0
我有一個非常簡單的方法,將RGB圖像轉換爲HSL並調整色相。這對於小圖像文件來說工作速度相對較快,但大圖像文件需要數分鐘才能處理。我將imgdata
轉換爲一個numpy數組,但是這似乎並沒有加速它的發展。我是否只需要在循環內部使用numpy函數來加速呢?我無法準確找到循環內部的瓶頸,因爲它只是相當簡單的數學計算。加快numpy圖像處理計算
from colorsys import rgb_to_hls, hls_to_rgb
from numpy import array
def reload_img():
global img, sizew, sizeh, maxsize, imgdata
img = Image.open(IMAGE_SRC)
sizew, sizeh = img.size
maxsize = ((sizew/2)**2 + (sizeh/2)**2)**0.5
imgdata = list(img.getdata())
# Convert to numpy array
imgdata = array(imgdata)
IMAGE_SRC = "test.jpg"
reload_img()
# Adjust Hue
for i in range(0,len(imgdata)):
r,g,b = imgdata[i]
r /= 255.0
g /= 255.0
b /= 255.0
(h, l, s) = rgb_to_hls(r,g,b)
h = .50
imgdata[i] = hls2rgb((h,l,s))
numpy的技巧是不使用python中的'for循環'。 Numpy默認以迭代的方式遍歷ndarray元素,所以試着想出一種分割和使用布爾模板的方法,你會看到巨大的性能提升。 – willnx
我有一段時間有點類似的問題,但它可以幫助你:http://stackoverflow.com/questions/5414638/using-numpy-and-pil-to-convert-56516bit-color-to-88824bit-color - 它曾經是一個for循環,但你可以看到如何刪除和數組操作被使用 – pyInTheSky
另外,如果你可以安裝它,[scikit image](http://scikit-image.org/docs/ dev/api/skimage.color.html#rgb2hsv)已經通過Numpy解決了這個問題。 – willnx