如何在Caffe中使用Opencv感兴趣区域(ROI)和python?

时间:2017-06-21 09:53:27

标签: python opencv numpy deep-learning caffe

我正在使用Caffe框架和python,我用这些图片取出了部分图像:

image = cv2.imread(picture_address)
roi = picture[ y:y+hight,  x:x+width]

正如我刚才注意到opencv将图像保存为 numpy.ndarray BGR(而不是rgb)。

当我试图将这个感兴趣的区域传递给Caffe时:

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', mean_array)
net.blobs['data'].data[...] = transformer.preprocess('data', roi)
out = net.forward()

我从Caffe那里得到了错误的预测,但当我拿出那部分并将其保存为文件并使用时:

image = caffe.io.load_image(picture_address)

我会得到正确的预测。所以我得到上面代码的type(image),它也是numpy.ndarray(有人说它是数据类型,并尝试转换它但它是所以两个代码都将图像保存为numpy,但是当我打印出numpy数组时,第一个(Opencv)元素在0-255(整数)范围内,第二个(numpy)在0-1(浮点数)之间,并且两个数组都具有相同的维度(width,height ,color_channels)。当我做cv2.imshow(ROI)我看到相同的图像,但Caffe做了不同的预测。

我的问题是:如何将Opencv numpy更改为Caffe numpy以获得真正的预测?

编辑(感谢@Shai评论):

我做了

a = np.array(img, dtype=np.float32)/255

但是当我做print a[0][0]时我得到了

[ 0.91764706  0.9137255   0.94509804]

来自OpenCV矩阵和

[ 0.90588236  0.9137255   0.96078432]

来自Caffe numpy,这是正确的。尺寸是否改变了?我真的很困惑。

EDIT2:cv2.cvtColor(img, cv2.COLOR_BGR2RGB)之后,两个矩阵看起来相同但在深度检查中,opencv看起来像:

<type 'numpy.ndarray'>
[[ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 **[ 0.90196079  0.90980393  0.95686275]** different row
 [ 0.90196079  0.90980393  0.95686275]
 [ 0.90196079  0.90980393  0.95686275]
 [ 0.90196079  0.90980393  0.95686275] ...

和Caffe看起来像:

<type 'numpy.ndarray'>
[[ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 [ 0.90588236  0.9137255   0.96078432]
 **[ 0.90588236  0.9137255   0.96078432]** different row 
 [ 0.90196079  0.90980393  0.95686275]
 [ 0.90196079  0.90980393  0.95686275]
 [ 0.90196079  0.90980393  0.95686275] ...

也许这就是预测不同的原因。但在cv.imshow()中看起来相同。

0 个答案:

没有答案