彩色图像的直方图分为rgb三个通道,或者是在其它的颜色空间比如HSV等,只要将图像转换到其它颜色空间就好了。
第一种方法是基于opencv的
void rgbhistogram()
{
//直方图参数初始化
int hist_size[] = { 256 };
float Range[]={0,255};
float* HistogramRange[]={ Range };
//从源图分别获取RGB三通道图
IplImage *HistogramImage;
IplImage* R_plane = cvCreateImage( cvGetSize(pImg), 8, 1 );
IplImage* G_plane = cvCreateImage( cvGetSize(pImg), 8, 1 );
IplImage* B_plane = cvCreateImage( cvGetSize(pImg), 8, 1 );
cvCvtPixToPlane( pImg, R_plane, G_plane, B_plane, 0 );
//建立RGB直方图
Histogram_R = cvCreateHist( 1, hist_size, CV_HIST_ARRAY, HistogramRange);
Histogram_G = cvCreateHist( 1, hist_size, CV_HIST_ARRAY, HistogramRange);
Histogram_B = cvCreateHist( 1, hist_size, CV_HIST_ARRAY, HistogramRange);
HistogramImage = cvCreateImage(cvSize(256,600),8,3);
HistogramIma