如下涉及split函数的使用:将彩色图像分成RGB三通道,注意顺序是B、G、R
void CalcImageHist(Mat &src, MatND &b_hist, MatND &g_hist, MatND &r_hist)
{
//split mat into rgb
vector<Mat> rgb_planes;
split(src, rgb_planes);
int histSize = 255;
float range[] = { 0, 255 };
const float* histRange = { range };
bool uniform = true;
bool accumulate = false;
calcHist(&rgb_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate);
calcHist(&rgb_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate);
calcHist(&rgb_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate);
//normalize hist to [0,1]
normalize(r_hist, r_hist, 0, 1, NORM_MINMAX, -1);
normalize(g_hist, g_hist, 0, 1, NORM_MINMAX, -1);
normalize(b_hist, b_hist, 0, 1, NORM_MINMAX, -1);
}