我需要讀取圖像,然後對每個像素執行一項功能,然後將其另存爲新圖像。我使用scikit-image作爲第一部分和最後一部分(閱讀和寫作),但在快速執行第二個操作(實際轉換)時遇到問題。scikit-image像素逐像素操作
scikit-image中的讀取操作的結果是形狀(WIDTH,HEIGHT,N_CHANNELS)的numpy數組,其中WIDTH和HEIGHT是圖像的寬度,N_CHANNELS是3或4.我需要應用函數例如將像素從[R,G,B]轉換爲[R - B,G - B,B - R]到每個像素的單獨像素。
我已經花了幾天的時間試圖讓這個工作,但我迄今爲止唯一的工作解決方案是循環遍歷每一行和列並執行計算。這需要很長時間才能完成。
我試圖向量化數組,但結果是一維數組,並且不可能使用它。有沒有其他表演方式來完成這件事?
def calculate_ndvi(nir, red):
if red == 0 and nir == 0:
return 0.5
else:
num = int(nir) - int(red)
den = int(nir) + int(red)
return num/den
zero_uint = numpy.uint8(0)
def process_color(clr):
ndvi = calculate_ndvi(clr[2], clr[0])
return [-ndvi, ndvi, zero_uint]
def save_ndvi_file():
image = io.imread(input_path)
rows = image.shape[0]
cols = image.shape[1]
out = numpy.empty(shape=(rows, cols, 3))
for i in range(rows):
for j in range(cols):
out[i][j] = process_color(image[i][j])
io.imsave('output.jpg', out)
沒有看到你的代碼,我們能做的最好的就是猜測。請準備[mcve]。在25MP文件上應用該功能不應該花很長時間,所以你可能做錯了什麼。 –