如何将 "mean_file_proto" 读入 OpenCV Mat 以便从均值中减去图像以用于 Caffe 模型?

How to read "mean_file_proto" into OpenCV Mat in order to subtract image from mean to use in Caffe Model?

我正在使用 OpenCV 3.2。

我下载了一个包含均值文件的 Caffe 模型 mean.binaryproto。我想从我的输入图像中减去平均值。 如何将 mean_file_proto 读入 OpenCV Mat 以便从均值中减去图像以在 Caffe 模型中使用?

编辑

我可以不使用 Caffe 只使用 OpenCV 来完成吗?我在 Visual Studio 2015 年 Windows 10 64 位上使用 OpenCV 3.2。我从网络摄像头获取图像,然后我想减去平均值,然后使用 OpenCV::dnn 得到结果。

平均文件是平面的,可能有 1 个或 3 个通道。比例为 [0, 255].

caffe::BlobProto mean_proto;
caffe::ReadProtoFromBinaryFile( filename, &mean_proto ); // check return code
caffe::Blob< float > mean_blob;
mean_blob.FromProto( mean_proto );
float *data = mean_blob.mutable_cpu_data();

您现在可以为每个频道创建 CV_32FC1 类型的 cv::Mat

cv::Mat channel( mean_blob.height(), mean_blob.width(), CV_32FC1, data );
data += mean_blob.height() * mean_blob.width();

最后,用这些通道填充一个矢量,并使用 cv::merge() 将它们组合成一个 cv::Mat,您可以从包含输入图像的另一个 cv::Mat 中减去它。如果您的图像已经归一化 [0, 1),您还需要重新调整均值。