caffe中图像预处理和opencv读取图像差异

caffe读取图像

使用caffe.io.Transform类操作:

1、设定图片的shape格式为网络data层格式
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
2、改变维度顺序,由原始图片维度(h, w, c)变为(c, h, w)
transformer.set_transpose('data', (2,0,1)) 
3、减去图像均值,注意要先将binaryproto格式均值文件转换为npy格式
transformer.set_mean('data', np.load(mean_file_path).mean(1).mean(1))
或者通道均值
transformer.set_mean('data', [b_v, g_v, r_v] )
4、缩放到[0,255]之间
transformer.set_raw_scale('data', 255)
5、交换通道,将C通道由RGB变为BGR
transformer.set_channel_swap('data', (2,1,0))
6、加载图片
im=caffe.io.load_image(img)
7、执行上面设置的图片预处理操作,并将图片载入到blob中
net.blobs['data'].data[...] = transformer.preprocess('data', im)

opencv读图

1、上述采用caffe.io.load_image读图,数据格式是RGB,数值范围0~1,因此会有4、5步的操作。
当采用opencv读图时,有2个区别:
(1)数据格式是BGR
(2)数值范围0~255

2、
利用imread函数读图时,shape格式为:H W C
利用resize函数缩放时,注意shape设为:W H

3、注意区分2个变换:
(1)transformer.set_transpose(‘data’, (2,0,1)) 这个是将HWC->CHW,不管是caffe.io读图,还是opencv读图,这步操作都是需要的。
(2)transformer.set_channel_swap(‘data’, (2,1,0))这个是将C通道的RGB->BGR。该操作只是在caffe.io读图时需要做下。opencv读图时本身就已经是BGR了。

你可能感兴趣的:(CNN部署在移动端)