1、rgb分离
rgb分离用一个简单的函数split即可,注意,分离之后如果分别显示3个通道,得到的结果将是都是灰色的。需要将生成的3个单通道merge一下,才是我们看到的效果:
split和merge的代码如下:
vector<Mat> bgr_planes(src.channels());
vector<Mat> mbgr(src.channels());
split(src, bgr_planes);
mbgr[0] = bgr_planes[2];
mbgr[1] = zero;
mbgr[2] = zero;
merge(mbgr, displayb);
mbgr[0] = zero;
mbgr[1] = bgr_planes[1];
mbgr[2] = zero;
merge(mbgr, displayg);
mbgr[0] = zero;
mbgr[1] = zero;
mbgr[2] = bgr_planes[0];
merge(mbgr, displayr);
imshow("r",displayr);
imshow("g", displayg);
imshow("b", displayb);
2、直方图的显示计算:
使用的是calcHist函数,我们将图像的3个通道分离之后,分别计算3个通道的直方图。
calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate);中bgr_planes为要计算的直方图图像,为mat类型,b_hist储存计算之后的直方图,histSize, histRange分别为大小和范围。
Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(0, 0, 0));创建了一个画布显示直方图,
normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());直方图均衡化。
3、直方图反向投影
图像的反向投影图是用输入图像的某一位置上像素值(多维或灰度)对应在直方图的一个bin上的值来代替该像素值,所以得到的反向投影图是单通的。用统计学术语,输出图像象素点的值是观测数组在某个分布(直方图)下的概率。
![反向投影图 - 十三月de天空 - 十三月de天空](http://img843.ph.126.net/qBxumpVeckpeRVVnlaHzPQ==/884394376826810377.jpg)
其中
b(xi)
表示在位置