1. 程式人生 > >Opencv---計算影象直方圖方差和均值

Opencv---計算影象直方圖方差和均值

Abstrcat:本文主要講解如何計算影象直方圖的方差和均值

1.求解一個影象的直方圖,原圖需要為灰度圖,程式碼如下:(首先需要申明通道和直方圖的範圍)

const int channels[1]={0};

const int histSize[1]={256};

float hranges[2]={0,255};

const float* ranges[1]={hranges};

MatND hist;

Mat img = imread("....",0); //讀取圖片

calcHist(&img,1,channels,Mat(),hist,1,histSize,ranges);

直方圖的結果儲存在hist裡面。
我們對hist求取均值和方差,opencv有專門的函式可以求取均值和方差,如下所示:

Mat convr, Mean;

meanStdDev(hist.rowRange(0,255), convr, Mean); // 代表求取直方圖0到255的均值和方差,我們也可以
求得0120的方差,函式裡面的hist.rowRange(0,255)可以改為hist.rowRange(0,120)

結果儲存在convr和Mean中,其中convr為方差,Mean為均值。

如果我們想求取整幅圖的均值和方差,我們可以通過reshape函式把img,展開為一行,然後再呼叫meanStdDev函式即可以求出整張圖片的方差和均值。