如何将 "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),您还需要重新调整均值。
我正在使用 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),您还需要重新调整均值。