使用caffe从图像生成HDF5数据文件时遇到了这个问题。
caffe.io.load_image
将图像加载到归一化范围0-1的变量中。
调整大小,但img
中的所有值都转换为零
img = caffe.io.load_image( patht_to_file )
print img.shape
print img.dtype
img = caffe.io.resize( img, (3,SIZE, SIZE) ) #resizes but all values in img converted to zero
print img.shape
print img.dtype
我得到的输出是
(240, 320, 3)
float32
(3, 58, 58)
float64
img
的值会因某些值而更改为全部0&#39
任何人都可以帮我解决这个问题。
我希望同样的float32改变resize
命令的顺序给出正确的输出
为var img
提供真正的非零值
但订单和类型不是我需要的
img = caffe.io.resize( img, (SIZE, SIZE, 3) ) # Gives real non zero values to var img
print img.shape
print img.dtype
输出
(240, 320, 3)
float32
(58, 58, 3)
float64
我需要将形状设置为3,58,58而不将所有值转换为零,即实际数据
答案 0 :(得分:5)
您的img
是一个三维数组,但不同的维度有不同的含义。前两个(240,320)
是空间维度,而第三个(3)
是“渠道”(或“要素”)维度。当resize
想要更改空间维度的图像,甚至混合(插入)相邻值时,您总是希望保持通道完整:您不想混合“红色“值以决定相邻像素的”绿色“值。
在caffe中,为了拍摄形状(240,320,3)
的输入图像并将其转换为形状(3,58,58)
,您需要执行两个的事情:
1.使用(240,320)
将空间维度从(58,58)
更改为caffe.io.resize_image
。此阶段的结果为img
形(58,58,3)
2.第二阶段是移动/ transpose
img
的维度,以便渠道维度成为第一个:img.transpose((2,0,1))
。
# first, resize the spatial dimensions, do not touch the channels
img = caffe.io.resize_image( img, (SIZE,SIZE), interp_order=3 )
# transpose the dimensions from H-W-C to C-H-W
img = img.transpose( (2,0,1) )
有关详细信息,请参阅resize_image
。
PS,
将RGB图像更改为BGR也很常见。你跳过了这个阶段。这是故意的吗?