簡體   English   中英

應用 function 來處理圖像的 RGB 值

[英]Applying function for manipulating RGB values of an image

我想應用一個自定義的基於 RGB 的 function 來處理圖像。 我當前的解決方案有效,但速度很慢:

from PIL import Image
import numpy as np

# Load Data and get RBG values
im = Image.open(file_name).convert('RGB')
pixels = np.array(im)
s = pixels.shape
p = pixels.reshape((s[0]*s[1], s[2]))

# Apply Funtion (Subtraction + Max Operator)
p = np.array([[rgb[0], max(rgb[1] - rgb[1]*0.5, 0), rgb[2]] for i, rgb in enumerate(p)])

# Generate Image
img = Image.fromarray(np.uint8(p.reshape(s)))
img.save(file_name + '_new.png')

以下矢量化代碼將給出相同的 output:

from PIL import Image
import numpy as np

# Load Data and get RBG values
im = Image.open(file_name).convert('RGB')
pixels = np.array(im)

# Apply Funtion (Subtraction + Max Operator)
pixels[:, :, 1] = np.maximum(pixels[:, :, 1]-0.5*pixels[:, :, 1], 0)

# Generate Image
img = Image.fromarray(pixels)
img.save(file_name + '_new.png')

我用(400, 400, 3) PNG 圖像測試了這兩個版本。 您的初始解決方案大約需要 1.2 秒,而我的代碼需要大約 0.85 秒。 因此,從我的角度來看,即使您的初始代碼也沒有那么慢。 也許對於較大的圖像,差異會(也)增加。

希望有幫助!

編輯:好的,我用(8239, 1349, 3) PNG 圖像做了另一個測試。 你的代碼需要 79.8 秒,我的(仍然)大約 0.85 秒。 所以,是的,矢量化代碼似乎更快。 ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM