【发布时间】: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