影象區域性均值、中值、方差求取結合opencv
阿新 • • 發佈:2018-12-27
結合opencv求取影象的區域性均值、中值、方差;
//src 為待處理影象 //indexrows 為影象遍歷的行數 //indexcols 為影象遍歷的列數 //meanv 儲存均值 //ker 視窗大小 //均值求取 void Meanvalue(Mat& src, int indexrows, int indexcols, float* meanv, int ker) { int lo = (ker - 1) / 2; float total = 0; for (int i = indexrows - lo; i <= indexrows + lo; i++) { for (int j = indexcols - lo; j <= indexcols + lo; j++) { total += src.at<uchar>(i, j); } } *meanv = total / (ker * ker); return; } //src 為待處理影象 //indexrows 為影象遍歷的行數 //indexcols 為影象遍歷的列數 //meanv 儲存中值 //ker 視窗大小 //中值求取 void Media(Mat& src, int indexrows, int indexcols, int* meanv, int ker) { int lo = (ker - 1) / 2; vector<int>moreo; for (int i = indexrows - lo; i <= indexrows + lo; i++) { for (int j = indexcols - lo; j <= indexcols + lo; j++) { moreo.push_back(src.at<uchar>(i, j)); } } sort(moreo.begin(), moreo.end()); *meanv = moreo.at(ker * ker / 2); return; } ////src 為待處理影象 //indexrows 為影象遍歷的行數 //indexcols 為影象遍歷的列數 //vall 儲存方差值 //ker 視窗大小 //mean 為均值 //區域性方差求取 void Vvalue(Mat& src, int indexrows, int indexcols, int* vall, int ker, float mean) { int lo = (ker - 1) / 2; float total = 0; for (int i = indexrows - lo; i <= indexrows + lo; i++) { for (int j = indexcols - lo; j <= indexcols + lo; j++) { total += pow((src.at<uchar>(i, j) - mean), 2); } } *vall = static_cast<int>(total); return; }