注册 登录
编程论坛 C图形专区

关于opencv的cvEqualizeHist函数直方图均衡化应用于单通道图像的问题

ljyoicqn 发布于 2011-12-23 23:46, 1284 次点击
各位,请教一下,我用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;  


    }
0 回复
1