关于opencv的cvEqualizeHist函数直方图均衡化应用于单通道图像的问题
各位,请教一下,我用cvEqualizeHist函数对单通道的bmp图像进行直方图均衡化处理的时候,一定要先将灰度图复制到3个通道么?我直接对读入的图像进行cvEqualizeHist函数不能运行,只有通过cvsplit函数讲图像复制到三个通道,并针对每个单独通道进行cvEqualizeHist函数,再将结果返回读入图像才能得到正确的效果,可是不是应该可以直接对读入的图像进行操作么?请问是我程序的问题还是函数本身就只能这样用?我的程序:
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
int main(void)
{
IplImage *image1 = cvLoadImage("1.bmp",1);
IplImage *redImage = cvCreateImage(cvGetSize(image1),IPL_DEPTH_8U,1);
IplImage *greenImage = cvCreateImage(cvGetSize(image1),IPL_DEPTH_8U,1);
IplImage *blueImage = cvCreateImage(cvGetSize(image1),IPL_DEPTH_8U,1);
cvSplit(image1,redImage,greenImage,blueImage,NULL);
cvEqualizeHist( redImage, redImage );
//请大家看看上面这句,只能在redImage上进行这个命令,如果改为
//cvEqualizeHist( image1, image1 );运行就会报错。这是什么呢?
cvNamedWindow("hello",CV_WINDOW_AUTOSIZE);
image1 = redImage;
cvShowImage("hello",image1);
cvWaitKey(0);
cvSaveImage( "2.bmp",image1);
return 0;
}