计算图像的均值和方差
#include <iostream>
#include <opencv2/opencv.hpp>
std::pair<float,float> cal_mean_std(unsigned char* src, int rows, int cols)
{
std::pair<float,float> val;
int r,c;
int size;
unsigned char* ptr;
float sum = 0.0f;
size = rows * cols;
for(r = 0; r<rows; r++)
{
ptr = src + r*cols;
for(c = 0; c < cols; c++)
sum += *(ptr+c);
}
val.first = sum / (float)size;
sum = 0.0f;
for(r = 0; r < rows; r++)
{
ptr = src + r*cols;
for(c = 0; c < cols; c++)
sum += std::pow(*(ptr+c)-val.first,2);
}
val.second = sqrt(sum/((float)size - 1));
return val;
}
int main()
{
cv::Mat src = cv::imread("tsukuba_l.png", 0);
std::pair<float,float> val = cal_mean_std(src.data, src.rows, src.cols);
std::cout << "mean : " << val.first << " std: " << val.second << std::endl;
return 0;
}
输出:mean: 67.6426 std: 53.5113