【发布时间】:2020-04-26 16:38:08
【问题描述】:
我正在尝试使用PIL 访问图像的 RGB 颜色通道,然后一次更改整个图像的颜色通道的颜色强度。
当我说 RGB 颜色通道时,here 是一个在线示例。
我不明白这是否必须逐个像素地完成。
我认为代码的逻辑如下所示:
import PIL
from PIL import Image
image=Image.open("my_pic.gif")
image=image.convert('RGB')
# made up function
channel_values = image.get_channel_values()
#channel_values = i.e. (50, 100, 50)
# do some math function to transform channel_values
channel_values = (95,125,75)
image.update_channel_value('R',channel_values)
display(image.getchannel('R'))
This 答案是唯一接近的答案,但对于我想要做的事情来说太复杂了。
我已经搜索了几个小时的 PIL 文档等,但似乎找不到任何地方。
这是我已经走了多远:
import PIL
from PIL import Image
image=Image.open("my_pic.gif")
image=image.convert('RGB')
display(image.getchannel('R'))
问题是image.getchannel() 只返回一个灰色/黑白图像。
我不仅想访问颜色通道值,我也想改变它。
【问题讨论】:
-
您能否进一步详细说明“改变强度”是什么意思?你究竟想做什么?处理单个像素?一次处理所有像素?
-
@HansHirse,根据您的要求澄清了 Q。这是针对整个图像/所有像素,而不仅仅是单个像素。
-
现在还不清楚,你想怎么改变强度。你想增值
2吗?你想添加一些“模式”吗?剪裁需要注意吗?也许,只需添加一些示例输入图像和所需的输出。 -
@HansHirse 根据您的反馈再次更新了 Q,感谢您帮助我提出更好的问题。
-
如果你的图片是 20px 宽和 10px 高,它将有 200 像素,即 20x10。每个像素都有一个红色、一个绿色和一个蓝色值。所以你将有 200 个红色值、200 个绿色值和 200 个蓝色值。如果将所有红色值乘以 1.1,红色将在图像中突出 10%。如果你将所有的绿色值乘以 0.8,所有的绿色将不那么突出 20%。你想做什么样的事情?