I have done the following code but do not understand properly what is going on there. Can anyone explain how to fill colors in Numpy?
Also I want to set in values in a way from 1 to 0 to give spectrum an intensity. E.g-: 0 means low intensity, 1 means high intensity
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
Expected Output-:

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)
it will give the exact thing that you are looking for!
let me know if it does not work
First of all: The results here when I tried the code is different then what you displayed in the question.

Let's say we have a gray scaled picture. Each pixel would have a value of integers between [0, 255]. Sometimes these values can be floats between [0, 1].
Here 0 is black and 255 is white. The vales between (0, 255) are grays. Towards 0 it gets more gray, towards 255 its less gray.
(I'm not sure about the term Polychromatic)
Colored pixels are not so different then gray scaled ones. The only different is colored pixels storing 3 different values between [0, 255] for each Red, Green and Blue values.

see: https://www.researchgate.net/figure/The-additive-model-of-RGB-Red-green-and-blue-are-the-primary-stimuli-for-human-colour_fig2_328189604
Now let's see what what the image you are creating is like:
You are crating a matrix of zeros with shape of: 256, 256 * 6, 3, which is: 256, 1536, 3.
Then with the first line you are replacing the first column with something else:
a[:, :, 0] = np.concatenate(
    (
        [255] * 256,
        np.linspace(255, 0, 256),
        [0] * 256,
        [0] * 256,
        np.linspace(0, 255, 256),
        [255] * 256
    )
)
Lets see what this lines do:
np.concatenate is easy. It meregs the arrays give.
What are the given arrays?
It is an array full of 255s with length of 256:
[255, 255, ..., 255, 255]
np.linspace(255, 0, 256)It is 256 values between [255, 0].:
[255, 254, 253, .., 2, 1, 0]
[0] * 256See 1
[0] * 256See 1
np.linspace(0, 255, 256)The reverse of 2. See 2.
[255] * 256See 1
You can follow the same logic for Green and ,Blue,
Let's see how these values are changing by plotting them.
The matrix a has the same value along y axis. So if we could plot R, G and B  values of one line of the matrix. We can see how the values are changing:
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()

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With