Opencv C++下的Mat归一化
void Mat_L2_mormal(cv::Mat &image)
{
//mat*mat,
cv::Mat out;
out=(image) .mul (image);
float sum=0.0;
for (int i=0;i<image.rows;i++){
sum=sqrt(cv::sum(out.row(i))[0]);
image.row(i)=(image.row(i)/sum);
}
out.release();
}
float scale = 0.0078125f ;
float mean_value = 127.5f;
void Mat_L2_mormal(cv::Mat &image)
{
for (int i = 0; i<image.rows; i++)
{
for (int j = 0; j<image.cols; j++)
{
image.at<Vec3b>(i, j)[0] = (image.at<Vec3b>(i, j)[0] - mean_value) * scale;
image.at<Vec3b>(i, j)[1] = (image.at<Vec3b>(i, j)[1] - mean_value) * scale;
image.at<Vec3b>(i, j)[2] = (image.at<Vec3b>(i, j)[2] - mean_value) * scale;
}
}
}
二、深度转换–convertTo()
2.1、API介绍
void convertTo( OutputArray dst, int rtype, double alpha=1, double beta=0 )
1
参数dst:输出图像;
参数rtype:要转换的深度;
参数alpha:对灰度值的缩放倍数;
参数beta:对灰度值得增量。
公式: dst = satyrate_cast(src * alpha + beta);
这个也是减均值128,归一化
cv::cvtColor(imgResized, imgResized, cv::COLOR_RGB2BGR);
//Mat_L2_mormal(imgResized);
vector<Mat> bgr;
cv::split(imgResized, bgr);
bgr[0].convertTo(bgr[0], CV_32F, 1.f / 128.f, -1.f);
bgr[1].convertTo(bgr[1], CV_32F, 1.f / 128.f, -1.f);
bgr[2].convertTo(bgr[2], CV_32F, 1.f / 128.f, -1.f);