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)
预期输出-:
首先:当我尝试代码时,这里的结果与您在问题中显示的结果不同。
假设我们有一张灰度图片。每个像素的值integers在 [0, 255] 之间。有时这些值可以floats在 [0, 1] 之间。
这里0是黑色,这里255是白色。(0, 255) 之间的值是灰色的。朝向0它变得更多灰色,朝向255它更少灰色。
(我不确定术语“多色”)彩色像素与灰度像素没有太大不同。唯一的不同是彩色像素3为每个 、Red和Green值存储 [0, 255] 之间的不同值Blue。
现在让我们看看您创建的图像是什么样的:
您正在创建一个形状为: 的零矩阵256, 256 * 6, 3,即:256, 1536, 3。
然后,在第一行中,您将用其他内容替换第一列:
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简单。它合并了数组给出的内容。给定的数组是什么?
它是一个充满255s 且长度为 256 的数组:
[255, 255, ..., 255, 255]
np.linspace(255, 0, 256)它是 [255, 0] 之间的 256 个值:
[255, 254, 253, .., 2, 1, 0]
[0] * 256见1
[0] * 256见1
np.linspace(0, 255, 256)2 的逆过程。参见 2。
[255] * 256见1
您可以对 和 遵循相同的逻辑Green,蓝色,
让我们通过绘制这些值来看看它们是如何变化的。
该矩阵a沿 y 轴具有相同的值。因此,如果我们可以绘制R、G和B 矩阵一行的值。我们可以看到这些值是如何变化的:
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)
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)
它会给出您正在寻找的确切内容!
如果不起作用请告诉我
| 归档时间: |
|
| 查看次数: |
1824 次 |
| 最近记录: |