c++ - 将 OpenCV 灰度 Mat 转换为 Caffe blob

标签 c++ opencv machine-learning deep-learning caffe

我去过following an example有人向我介绍了如何将 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“补丁”被转换为“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,为什么我需要推回“输入” vector 并将其传递到网络?我不能将 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 需要它的输入作为 Blobstd::vector(原则上,可能有 net 需要不止一个单个输入 blob 以产生输出)。
请注意,您并不是将 input_blob 复制到输入 vector 中,而是将指针传递给它。

关于c++ - 将 OpenCV 灰度 Mat 转换为 Caffe blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32204866/

相关文章:

c++ - 在哪里可以搜索免费的 C/C++ 库?

c++ - 如何在 C++ 中使用构造函数动态声明对象数组

c++ - 带省略号的函数重载

c++ - 当使用 Qt 构建 OpenCV 时,cvShowImage 在辅助线程中阻塞

python - 如何使用 Python OpenCV 在图像中获取填充区域及其边界?

python - tslearn.clustering.TimeSeriesKMeans 与 sklearn.cluster.KMeans

python - Pandas - 将所有列中的特定值替换为另一列中的相应值

c++ - inportb() 和 inport() 函数有什么区别?

c++ - OpenCV LDFlags 链接问题

windows - 有多少个可用于 Windows 的设备驱动程序