我将包含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()
我得到了下面的图片,而不是原来的图片
更新:我按照建议将这些标准化像素值乘以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 图片:
尝试再次将
data
乘以255
并将其四舍五入为int。我猜RGB元组中的值应该在0-255
范围内,而不是0-1
范围内在花了一天的时间恢复这张图片后,我找到了一个解决方案
我相信我的标准化图像像素的扁平化版本存储在名为
im_data
的一维数组中,如下所示,其中下标
N
是像素数因此,第一步我将每个像素与
255.0
相乘,得到0-255
之间的像素值:与使用
(im_h, im_w, 3)
形状重塑数组不同,我使用(3, im_h, im_w)
形状重塑数组,以便:最后,我转置结果numpy数组以获得正确的图像形状,即
(im_h, im_w, 3)
,因此:最后,
和繁荣: (图像是基准数据集https://motchallenge.net/中的一个)
老实说,我并不完全确定这些是怎么回事。我只是在搞数组操作
相关问题 更多 >
编程相关推荐