转换OpenCV灰度垫Caffe blob

Converting OpenCV grayscale Mat to Caffe blob

本文关键字:Caffe blob 灰度 OpenCV 转换      更新时间:2023-10-16

我一直在遵循一个示例,我提到了如何将OpenCV Mat转换为我可以从中进行预测的Caffe对象。据我所知,第一部分缩放图像,然后初始化caffe类TransformationParameter:

const float img_to_net_scale = 0.0039215684;
TransformationParameter input_xform_param;
input_xform_param.set_scale( img_to_net_scale );
DataTransformer<float> input_xformer( input_xform_param, TEST );

然后,将OpenCV Mat"patch"转换为"input_blob"。我已经改变了这一部分,因为我已经加载了灰度图像而不是彩色图像。

cv::Mat patch = cv::imread( input_file_str, CV_LOAD_IMAG_GRAYSCALE  );
Blob<float> input_blob;
input_blob.Reshape(1, patch.channels(), patch.rows, patch.cols );
input_xformer.Transform( patch, &input_blob );

最后,我不太确定这一节做什么-如果我已经把我的OpenCV Mat转换为Caffe blob,为什么我需要推回"输入"向量并将其传递给网络?我不能直接将input_blob传递到网络中以获得我的预测吗?

std::vector<Blob<float>*> input;
input.push_back( &input_blob );
std::vector<Blob<float>*> output = net->Forward( input );

您需要push_back您的input_blob,以便将其传递给net,因为net期望其输入为Blobs std::vector (原则上,可能有net需要多个单一输入blob来产生输出)。
注意,您不是将input_blob复制到输入向量中,而是传递一个指向它的指针。