如何填充 numpy 中的值以创建频谱

Cod*_*der 6 python arrays numpy

我已经完成了以下代码,但没有正确理解那里发生的事情。谁能解释一下如何在 Numpy 中填充颜色?

另外,我想以某种方式设置值,以1 to 0赋予光谱强度。例如-:0表示低强度,1表示高强度

import numpy as np
import matplotlib.pyplot as plt 

a= np.zeros([256*6,256*6, 3], dtype=np.uint8) # init the array
# fill the array with rgb values to create the spectrum without the use of loops

#red
a[:,:,0] = np.concatenate(([255]*256, np.linspace(255,0,256), [0]*256, [0]*256, np.linspace(0,255,256), [255]*256))

#green
a[:,:,1] = np.concatenate((np.linspace(0,255,256), [255]*256, [255]*256, np.linspace(255,0,256), [0]*256,[0]*256))

#blue
a[:,:,2] = np.concatenate(([0]*256, [0]*256,np.linspace(0,255,256),[255]*256, [255]*256, np.linspace(255,0,256)))


plt.imshow(a)  # this is different than what I am looking for

Run Code Online (Sandbox Code Playgroud)

预期输出-:

预期输出

MSH*_*MSH 7

首先:当我尝试代码时,这里的结果与您在问题中显示的结果不同。

结果图像

颜色

单色

假设我们有一张灰度图片。每个像素的值integers在 [0, 255] 之间。有时这些值可以floats在 [0, 1] 之间。

这里0是黑色,这里255是白色。(0, 255) 之间的值是灰色的。朝向0它变得更多灰色,朝向255它更少灰色。

多色

(我不确定术语“多色”)彩色像素与灰度像素没有太大不同。唯一的不同是彩色像素3为每个 、RedGreen值存储 [0, 255] 之间的不同值Blue

颜色

参见:https://www.researchgate.net/figure/The-additive-model-of-RGB-Red-green-and-blue-are-the-primary-stimuli-for- human-colour_fig2_328189604

现在让我们看看您创建的图像是什么样的:

创建:

您正在创建一个形状为: 的零矩阵256, 256 * 6, 3,即:256, 1536, 3

R值

然后,在第一行中,您将用其他内容替换第一列:

a[:, :, 0] = np.concatenate(
    (
        [255] * 256,
        np.linspace(255, 0, 256),
        [0] * 256,
        [0] * 256,
        np.linspace(0, 255, 256),
        [255] * 256
    )
)
Run Code Online (Sandbox Code Playgroud)

让我们看看这行代码做了什么:

np.concatenate简单。它合并了数组给出的内容。给定的数组是什么?

  1. [255] * 256

它是一个充满255s 且长度为 256 的数组:

[255, 255, ..., 255, 255]

  1. np.linspace(255, 0, 256)

它是 [255, 0] 之间的 256 个值:

[255, 254, 253, .., 2, 1, 0]

  1. [0] * 256

见1

  1. [0] * 256

见1

  1. np.linspace(0, 255, 256)

2 的逆过程。参见 2。

  1. [255] * 256

见1

G 和 B 值

您可以对 和 遵循相同的逻辑Green,蓝色,

让我们通过绘制这些值来看看它们是如何变化的。

该矩阵a沿 y 轴具有相同的值。因此,如果我们可以绘制RGB 矩阵一行的值。我们可以看到这些值是如何变化的:

plt.plot(a[0][:, 0], "r-", label="Red values along x axis")
plt.plot(a[0][:, 1], "g-", label="Green values along x axis")
plt.plot(a[0][:, 2], "b-", label="Blue values along x axis")


plt.legend(loc="upper left")
plt.show()
Run Code Online (Sandbox Code Playgroud)

矩阵 a 上一条线的 R、G 和 B 值


jon*_*ony 7


res=256
op=np.zeros([res,res, 3]) # init the array

#RGB

op[:,:,0]= np.linspace(0,1,res)

op[:,:,1]=np.linspace(0,1,res).reshape (256, 1)

op[:,:,2]= np.linspace(1,0,res)

plt.imshow(op)


Run Code Online (Sandbox Code Playgroud)

它会给出您正在寻找的确切内容!

如果不起作用请告诉我