numpy 如何将不同的R G B数组转换回图像?

9bfwbjaz  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

在Python中:
我读入一个图像,我想单独处理每个通道(RGB),然后将修改后的通道重新组合到一个图像中,并将其保存到磁盘。我已经尝试了我能想到的一切,但我得到损坏的图像回来,无论如何。
顺便说一句,我不能使用枕头的大部分,因为我想16位处理。
我试过无数种方法

import imageio
import numpy as np
from PIL import Image

def load_pic():
    global picky, reds, greens, blues, shape
    filename = "FinalStacked.fit"
    print(f"loading {filename}")
    picky = imageio.v3.imread(filename, plugin = "FITS")
    shape = picky.shape
    print(f"Image loaded, size = {shape}")

    reds = picky[0]
    greens = picky[1]
    blues = picky[2]
    print("picture loaded")

def finish():

    out = np.dstack((reds, greens, blues))
    
    im = Image.fromarray(out, 'RGB')
    print(im.mode)
    imageio.v3.imwrite("done.png", im)

load_pic()
finish()

但似乎什么都不管用。我希望上面的代码返回一个合理的输入图像的传真,但它没有。

olmpazwi

olmpazwi1#

正如在注解中提到的,你实际上并没有用你的代码获得RGB通道。类似下面的代码将为您工作:

from PIL import Image
import numpy as mp 

# read image get RGB
picky = imageio.v3.imread(filename)

# create image
Image.fromarray(picky, 'RGB')

你代码中的错误是你走错了频道

# UPDATETHIS
reds = picky[:,:,0,]
greens = picky[:,:,1]
blues = picky[:,:,2]

out = np.dstack((reds, greens, blues))
print(picky.shape, out.shape)

打印:

((534, 800, 3), (534, 800, 3))

相关问题