Python 从包含RGB图像数据的一维阵列中检索RGB图像
我将包含RGB图像数据的C数组传递给Python中的函数,以进一步处理图像。 如何检索此图像并在Python中打印它 名为C_data的包含RGB图像数据的C数组是由创建的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
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()