Mat img = (Mat_<uchar>(9, 12) <<
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
3, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
4, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
6, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
7, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
9, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
);
//灰度值有效範圍是1~12,所以設定爲hr1[]={1,13};矩陣b的灰度值有效範圍是1<=V<13
float hr1[] = { 1,13 };
//將灰度範圍均分爲3部分,三個直方條取值範圍分別爲:第1部分1~4,第2部分5~8,第3部分9~12。
//因此令histSize[1]={3},這裏的3意味着整個圖像灰度範圍1~12被均分爲3部分,分別統計像素個數。
int histSize[1] = { 3 };
int channels[1] = { 0 };
const float* ranges[] = { hr1 };
Mat hist;
calcHist(&img, 1, channels, Mat(), hist, 1, histSize, ranges, true);
//其中hist輸出的是1-4,5-8,9-12區域中像素值的個數統計,且分別是31,40,37
//且Mat的內容--> 行:直方圖個數,列:1
cout << "hist=" << endl << hist << endl;