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;