Python 从包含RGB图像数据的一维阵列中检索RGB图像

Python 从包含RGB图像数据的一维阵列中检索RGB图像,python,arrays,numpy-ndarray,Python,Arrays,Numpy Ndarray,我将包含RGB图像数据的C数组传递给Python中的函数,以进一步处理图像。 如何检索此图像并在Python中打印它 名为C_data的包含RGB图像数据的C数组是由创建的 for(k = 0; k < c; ++k){ for(j = 0; j < h; ++j){ for(i = 0; i < w; ++i){ int dst_index = i + w*j + w*h*k; int src_index

我将包含RGB图像数据的C数组传递给Python中的函数,以进一步处理图像。 如何检索此图像并在Python中打印它

名为C_data的包含RGB图像数据的C数组是由创建的

for(k = 0; k < c; ++k){
    for(j = 0; j < h; ++j){
        for(i = 0; i < w; ++i){
            int dst_index = i + w*j + w*h*k;
            int src_index = k + c*i + c*w*j;
            c_data[dst_index] = (float)stb_im[src_index]/255.;
        }
    }
}
我尝试使用

data = im_data.reshape((im_h, im_w, 3)) 
并使用创建一个PIL图像对象

img = PIL.Image.fromarray(data, 'RGB')
,但当我运行以下命令时

img.show()
我得到了下面的图片,而不是原来的图片

更新:我按照建议将这些标准化像素值乘以255.0,将numpy数组强制转换为int和plot:

im_data = (im_data*255.0).astype(np.uint8)
im_data = im_data.reshape((im_h, im_w, 3))
img = Image.fromarray(im_data, 'RGB')
img.show()
我得到的图像是重复的图案,而不是一个大的RGB 图片:


尝试将
数据
再次乘以
255
并将其四舍五入为int。我想RGB元组中的值应该在
0-255
范围内,而不是
0-1
在花了一天的时间恢复此图像后,我找到了解决方案

我相信我的标准化图像像素的扁平化版本存储在名为
im_data
的一维数组中,看起来像这样

[r1 g1 b1 r2 g2 b2…rN gN bN]

,其中下标
N
是像素数

因此,第一步我将每个像素乘以
255.0
,得到
0-255
之间的像素值:

import numpy as np
im_data = (im_data*255.0).astype(np.uint8)
我没有使用
(im\u h,im\u w,3)
的形状来重塑数组的形状,而是使用
(3,im\u h,im\u w)
的形状来重塑数组的形状,以便:

im_data = im.reshape((3, im_h, im_w))
最后,我转置结果numpy数组以获得正确的图像形状,即
(im\u h,im\u w,3)
,因此:

im_data = np.transpose(im, (1, 2, 0))
最后,

img = Image.fromarray(im_data, 'RGB')
img.show() 
和繁荣: (图像是基准数据集之一)


老实说,我并不完全确定这些是怎么回事。我只是乱弄数组操作。

根据文档
RGB
模式是3x8位像素,我建议创建1-d数组,每个元素将由一个像素的RGB值[R,G,B]组成数组,如果这不起作用,你也可以试着用3个颜色通道制作一个一维阵列,在某种程度上看起来像是高度和宽度混合了。试着交换订单,看看是否有效。
img = Image.fromarray(im_data, 'RGB')
img.show()