首页 > 解决方案 > 应用函数来处理图像的 RGB 值

问题描述

我想应用一个自定义的基于 RGB 的函数来处理图像。我当前的解决方案有效,但速度很慢:

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')

标签: pythonnumpyimage-processingpython-imaging-library

解决方案


以下矢量化代码将给出相同的输出:

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 秒。所以,是的,矢量化代码似乎更快。;-)


推荐阅读