我一直在关注Caffe的MINST示例,并尝试使用C++部署训练模型的测试,其中我使用OpenCV来读取图像。在示例中,他们提到在训练和测试图像时,他们
将输入像素缩放到[0,1)范围内。为什么是0.00390625?这是1除以256的结果。
我听说Caffe中有一个DataTransformer类可以用来缩放图像,但如果我将OpenCV Mat对象中的每个像素乘以0.00390625,这样做会得到相同的结果吗?
回答:
这个想法是对的。但请记住在缩放之前将你的OpenCV Mat转换为float或double类型。
类似于这样:
cv::Mat mat; // 假设这是你的图像之一(灰度)/* 将其转换为float */mat.convertTo(mat, CV_32FC1); // 对彩色图像使用CV_32FC3/* 在这里缩放 */mat = mat * 0.00390625;
更新#1:转换和缩放也可以在一行内完成,即
cv::Mat mat; // 假设这是你的图像之一(灰度)/* 在这里转换和缩放 */mat.convertTo(mat, CV_32FC1, 0.00390625);