思路:1.先把BGR彩图用cvSplit() 分解成三张单通道图像
2.分别对三张单通道图像进行cvEqualizeHist()
3.用cvAddWeight()或者cvMerge()将3张单通道图像重新合并成彩色图像
测试用图:
程序代码:
#include <highgui.h>
#include<cv.h>
#include <opencv2/legacy/legacy.hpp>
using namespace std;
int main()
{
IplImage *img_in = cvLoadImage("test.jpg");
IplImage *img_red = cvCreateImage(cvGetSize(img_in),IPL_DEPTH_8U,1);
IplImage *img_blue = cvCreateImage(cvGetSize(img_in),IPL_DEPTH_8U,1);
IplImage *img_green = cvCreateImage(cvGetSize(img_in),IPL_DEPTH_8U,1);
IplImage *img_out = cvCreateImage(cvGetSize(img_in),IPL_DEPTH_8U,3);
cvNamedWindow("img_in",CV_WINDOW_AUTOSIZE);
cvShowImage("img_in",img_in);
cvSplit(img_in,img_blue,img_green,img_red,0);
cvEqualizeHist(img_blue,img_blue);
cvEqualizeHist(img_green,img_green);
cvEqualizeHist(img_red,img_red);
cvMerge(img_blue,img_green,img_red,0,img_out);
cvNamedWindow("img_out",CV_WINDOW_AUTOSIZE);
cvShowImage("img_out",img_out);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img_in);
cvReleaseImage(&img_blue);
cvReleaseImage(&img_green);
cvReleaseImage(&img_red);
cvReleaseImage(&img_out);
return 0;
}
运行结果: