图像均值:
![mean=\frac{\sum \sum I\left ( x,y \right )}{num}](https://latex.codecogs.com/gif.latex?mean%3D%5Cfrac%7B%5Csum%20%5Csum%20I%5Cleft%20%28%20x%2Cy%20%5Cright%20%29%7D%7Bnum%7D)
方差:
![variance=\frac{\sum \sum \left [ I\left ( x,y \right ) - mean \right ]^{2}}{num}](https://latex.codecogs.com/gif.latex?variance%3D%5Cfrac%7B%5Csum%20%5Csum%20%5Cleft%20%5B%20I%5Cleft%20%28%20x%2Cy%20%5Cright%20%29%20-%20mean%20%5Cright%20%5D%5E%7B2%7D%7D%7Bnum%7D)
?![\sum \sum \left [ I\left ( x,y \right ) - mean \right ] ^{2} =\sum \sum \left ( I\left ( x,y \right )^{2} - 2 * I \left ( x,y \right )* mean + mean^{2} \right ) =\sum \sum I\left ( x,y \right )^{2} - 2 * mean * \sum \sum I\left ( x,y \right )+\sum \sum mean^{2}](https://latex.codecogs.com/gif.latex?%5Csum%20%5Csum%20%5Cleft%20%5B%20I%5Cleft%20%28%20x%2Cy%20%5Cright%20%29%20-%20mean%20%5Cright%20%5D%20%5E%7B2%7D%20%3D%5Csum%20%5Csum%20%5Cleft%20%28%20I%5Cleft%20%28%20x%2Cy%20%5Cright%20%29%5E%7B2%7D%20-%202%20*%20I%20%5Cleft%20%28%20x%2Cy%20%5Cright%20%29*%20mean%20+%20mean%5E%7B2%7D%20%5Cright%20%29%20%3D%5Csum%20%5Csum%20I%5Cleft%20%28%20x%2Cy%20%5Cright%20%29%5E%7B2%7D%20-%202%20*%20mean%20*%20%5Csum%20%5Csum%20I%5Cleft%20%28%20x%2Cy%20%5Cright%20%29+%5Csum%20%5Csum%20mean%5E%7B2%7D)
标准差:
![stde = \sqrt{variance}](https://latex.codecogs.com/gif.latex?stde%20%3D%20%5Csqrt%7Bvariance%7D)
?
#include <opencv2/opencv.hpp>
#include "svmlicenceplate.h"
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat srcImage = imread("22-5.jpg");
if (srcImage.empty())return -1;
Mat gray;
cvtColor(srcImage, gray, COLOR_BGR2GRAY);
Mat m,s;
//opencv的函数计算均值和标准差
meanStdDev(gray, m, s);
cout << m << ' ' << s << endl;
//waitKey(0);
//一次遍历求均值和标准差
int height = srcImage.rows;
int width = srcImage.cols;
int num = height * width;
double a = 0, b = 0, me = 0;
for (int r = 0; r < height; r++) {
uchar* ptr = gray.ptr<uchar>(r);
for (int c = 0; c < width; c++) {
me += ptr[c];
a += (double)ptr[c] * ptr[c];
}
}
b = me;
me = me / num;
cout << me << endl;//均值
double sd = (a - 2 * b * me + num * me * me) / num;
cout << sd << endl;//方差
cout << sqrt(sd) << endl;
return 0;
}
|