python - 应用函数来处理图像的 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')
解决方案
以下矢量化代码将给出相同的输出:
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 秒。所以,是的,矢量化代码似乎更快。;-)
推荐阅读
- python - Python:如果小于,如何用另一个数组的值替换数组中的值?
- sql - 插入表的视图是否会影响新数据的上传(到表中)
- eclipse - BundleException:缺少约束:导入包:org.eclipse.e4.ui.internal.workbench.swt;版本="0.0.0"
- javascript - CSS底部填充页面停止滚动?
- java - 使用 Java 和 Selenium 从 HTML 中解析信息以找出选定的选项
- c++ - 致命错误 C1001:编译器发生内部错误 - openmp for parallel for
- python - Is there a pythonic way to decouple optional functionality from a function's main purpose?
- php - 如何执行 rolling_curl 函数
- image-processing - GIMP 使用什么前景选择算法?
- xamarin - Xamarin Forms ListView.Footer Margin 未在 iOS 上应用