【问题标题】:Retrieve RGB image from 1-dim array containing RGB image data从包含 RGB 图像数据的 1-dim 数组中检索 RGB 图像
【发布时间】:2020-02-20 10:24:32
【问题描述】:

我将包含 RGB 图像数据的 C 数组传递给 Python 中的函数以进一步处理图像。 如何在 Python 中检索此图像并将其绘制出来?

包含 RGB 图像数据的名为 c_data 的 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_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)

我尝试使用

简单地重塑 numpy 数组
data = im_data.reshape((im_h, im_w, 3)) 

并使用

创建一个 PIL 图像对象
img = PIL.Image.fromarray(data, 'RGB')

,但是当我运行以下命令时

img.show()

我得到的是以下而不是原始图像。

更新:我按照建议将这些标准化像素值乘以 255.0,将 numpy 数组转换为 int 类型并绘图:

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 的图像 图片:

【问题讨论】:

  • 根据文档 pillow.readthedocs.io/en/3.1.x/handbook/… RGB 模式是 3x8 位像素,我建议创建一维数组,每个元素都是由 RGB 值 [R , G, B] 组成的数组一个像素,如果这不起作用,您也可以尝试制作包含 3 个颜色通道的一维数组
  • 有点像在某些时候高度和宽度混合在一起。尝试交换订单,看看是否有效。

标签: python arrays numpy-ndarray


【解决方案1】:

尝试再次将 data 乘以 255 并将其四舍五入为 int。我猜RGB元组中的值应该来自0-255,而不是0-1

【讨论】:

    【解决方案2】:

    花了一天时间恢复这张图片,我找到了解决办法。

    我相信我的归一化图像像素的扁平化版本存储在名为 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() 
    

    和繁荣: (图片是MOTChallenge基准数据集https://motchallenge.net/之一)

    说实话,我不完全确定所有这些是如何实现的。我只是搞乱数组操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2020-05-15
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多