从包含RGB图像数据的1dim数组中检索RGB图像

2024-04-25 18:01:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我将包含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.;
        }
    }
}

C数组被转换成一个numpy数组,并通过名为im\u data的参数传递给Python函数,函数头如下所示

def read_img_from_c(im_data, im_h, im_w):

print(im_h) // 480
print(im_w) // 640
print(im_data.shape) // (921600,) --> (480*640*3)

我尝试使用

data = im_data.reshape((im_h, im_w, 3)) 

并使用创建一个PIL图像对象

img = PIL.Image.fromarray(data, 'RGB')

,但当我运行以下命令时

img.show()

我得到了下面的图片,而不是原来的图片

enter image description here

更新:我按照建议将这些标准化像素值乘以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 图片:

The original image was from the MOT16-02 sequence of the MOTChallenge Benchmark dataset


Tags: 数据函数图像srcimgfordataindex
2条回答

尝试再次将data乘以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_h, im_w, 3)形状重塑数组不同,我使用(3, im_h, im_w)形状重塑数组,以便:

im_data = im.reshape((3, im_h, im_w))

最后,我转置结果numpy数组以获得正确的图像形状,即(im_h, im_w, 3),因此:

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

最后,

img = Image.fromarray(im_data, 'RGB')
img.show() 

和繁荣: enter image description here (图像是基准数据集https://motchallenge.net/中的一个)

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

相关问题 更多 >