use*_*692 5 python numpy matplotlib
我正在寻找一种方法来对图像的所有像素的颜色值求和.我要求它从其表面亮度图像估计一个明亮光源(比如一个遥远的星系)的总光通量.有谁请帮助我如何总结图像的所有像素的颜色值.
例如:下一个图像的每个像素的颜色值介于0到1之间.但是当我用imread读取图像时,我得到的每个像素的颜色值是一个包含3个元素的数组.我是matplotlib中的新手,我不知道如何将该数组转换为0到1的单个值并添加它们.

如果您有PIL图像,那么您可以转换为灰度("发光度"),如下所示:
from PIL import Image
col = Image.open('sample.jpg')
gry = col.convert('L') # returns grayscale version.
Run Code Online (Sandbox Code Playgroud)
如果您想要更多地控制颜色的添加方式,请先转换为numpy数组:
arr = np.asarray(col)
tot = arr.sum(-1) # sum over color (last) axis
mn = arr.mean(-1) # or a mean, to keep the same normalization (0-1)
Run Code Online (Sandbox Code Playgroud)
或者你可以不同地加权颜色:
wts = [.25, .25, .5] # in order: R, G, B
tot = (arr*wts).sum(-1) # now blue has twice the weight of red and green
Run Code Online (Sandbox Code Playgroud)
对于大型数组,这相当于最后一行并且更快,但可能更难阅读:
tot = np.einsum('ijk, k -> ij', arr, wts)
Run Code Online (Sandbox Code Playgroud)
所有上述相加的颜色的各像素的,把彩色图像转换成灰度级(亮度)的图像.以下将所有像素加在一起以查看整个图像的积分:
tot = arr.sum(0).sum(0) # first sums all the rows, second sums all the columns
Run Code Online (Sandbox Code Playgroud)
如果您有彩色图像,tot仍会有三个值.如果您的图像是灰度图像,则它将是单个值.如果你想要平均值,只需替换sum为mean:
mn = arr.mean(0).mean(0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |