gpt4 book ai didi

python - 通过使用 np.newaxis 进行 RGB 成像,从 ( :, :, 1) 扩展到 ( :, :, 3)

转载 作者:行者123 更新时间:2023-12-01 00:57:07 27 4
gpt4 key购买 nike

我试图将最初的列表“ThetaVect1”转换为形状为(16,)的np.ndarray,将其更改为(4,4)数组,然后使用np.ndarray。 newaxis 来获得第三个维度,我试图将其设置为 3,但不知道如何设置。

我的想法是,一旦我这样做了,我就可以根据每个“像素”不同的随机数 np.random.randint(0,255) 为我的灰度图像添加颜色。因此,虽然我可以获得 print(Greyscale_Theta1_RGB.shape) = (4,4,1) 我无法将其转换为 (4,4,3) 格式。我相信这是需要做的。

我正在尝试通过以下想法来工作 here

Greyscale_ThetaVect1 = np.array(ThetaVect1,dtype=np.uint8)
print(Greyscale_ThetaVect1.shape)
Greyscale_Theta1 = np.reshape(Greyscale_ThetaVect1, (-1, 4))

Greyscale_Theta1_RGB = Greyscale_Theta1[:,:,None]
# Greyscale_Theta1_RGB [:,:,0] = np.random.randint(0,255)
# Greyscale_Theta1_RGB [:,:,1] = np.random.randint(0,255)
# Greyscale_Theta1_RGB [:,:,2] = np.random.randint(0,255)

print(Greyscale_Theta1_RGB.shape)

save_file = "CM.jpg"
i = Image.fromarray(Greyscale_Theta1).save(save_file)

i = Image.open("CM.jpg")
i.show()

编辑

使用 Mark Setchell 的精彩答案和已接受的答案 here我试图在二维图像数组中放入随机颜色。我使用此代码得到了一些东西:

for k,l in enumerate(rgb):
print(l)
rgb[k] = l * [random.randint(0, 255),random.randint(0, 255),random.randint(0, 255)]

这不太正确,因为开头有明显的黑线和黑条。图像被放大以显示黑色直线。

enter image description here

我还通过将 f 更改为:f = lambda i, j: int((128)) 来删除渐变,并能够获得这个有趣的图像,但请注意,没有像素,但是改为线条。

enter image description here

最佳答案

只是在@hpaulj 的评论上添加内容......

只需按顺序复制并附加下面的代码段,无需散布图像即可获得单个可运行的代码块。

我认为您有一个灰度图像,您想要用颜色注释,但不知道如何将其转换为 RGB 图像,并且大概还保留您已有的灰度值。

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Define width and height big enough to see
w,h = 256,100

# Make left-right gradient of greyscale values - without going to pure white so you can see the extent on StackOverflow's white background
f = lambda i, j: int((j*192)/w)
gg = np.fromfunction(np.vectorize(f), (h,w)).astype(np.uint8)

这给了我们这个单 channel 灰度图像:

enter image description here

# Replicate greyscale and stack to make RGB image where R=G=B
rgb = gg[:,:,np.newaxis].repeat(3,2)

# If you find the above syntax difficult, here is an alternative
# ... stack the grey image 3 times in the "depth" dimension
# rgb = np.dstack((gg,gg,gg))

# DEBUG: Save image
Image.fromarray(rgb).save('result1.png')

这给了我们这个 RGB 图像:

enter image description here

# DRAWING PART
# Make top edge red 10px wide
rgb[:10,:,:]=[255,0,0]

# Make left border green 20px wide
rgb[:,:20,:]=[0,255,0]

# Make right border blue 30px wide
rgb[:,:-30:-1,:]=[0,0,255]

# DEBUG: Save image
Image.fromarray(rgb).save('result2.png')

enter image description here

如果您想使用 PIL 而不是使用 Numpy 来绘制图像或为图像着色,请删除上面“DRAWING PART”后面的代码并替换为以下内容:

from PIL import ImageDraw 

# Make PIL Image from numpy array
rgb = Image.fromarray(rgb)

# Get drawing handle and draw magenta circle and save
draw = ImageDraw.Draw(rgb)
draw.ellipse([10,10,90,90],fill=(255,0,255))
rgb.save('result.png')

enter image description here

<小时/>

如果您只想要 700x300 的随机图像:

import numpy as np
from PIL import Image

# Generate a random image 700x300
im = np.random.randint(0,256,(300,700,3), dtype=np.uint8)

# Make into PIL Image, display and save
p = Image.fromarray(im)
p.display()
p.save('result.png')

enter image description here

如果你想在渐变上制作随机图像,你可以这样做:

import numpy as np
from PIL import Image

# Generate a random image 700x300
im = np.random.randint(0,256,(300,700,3), dtype=np.uint8)

gradient = np.linspace(0,1,700,dtype=np.float32) + np.zeros(300)[:, None]
im = im*np.dstack((gradient,gradient,gradient))

enter image description here

关于python - 通过使用 np.newaxis 进行 RGB 成像,从 ( :, :, 1) 扩展到 ( :, :, 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com