0

我已将图像从 RGB 转换为 B/W,然后我想将其转换回 RGB,但我有一个问题:

我的代码:

             int width=zoomedImage->width;
             int height=zoomedImage->height;
             TempImage=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
             cvCvtColor(zoomedImage, TempImage,CV_RGB2GRAY);
             cvThreshold( TempImage, TempImage,128,256,CV_THRESH_BINARY);
             cvCvtColor( TempImage,zoomedImage,CV_GRAY2RGB);
             this->pictureBox1->Image=(gcnew 
System::Drawing::Bitmap(zoomedImage->width,zoomedImage->height,zoomedImage->widthStep, 
System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)zoomedImage->imageData)); 

在这里,我将 zoomedImage 显示为黑白图像,在另一个动作中,我想将 zoomedImage 显示为 RGB 图像,这里的主要问题是我无法更改将要绘制的图像,因为我的代码的另一部分取决于在这个序列上,我在另一个动作中写道:

  cvCvtColor( TempImage,zoomedImage,CV_GRAY2RGB);
this->pictureBox1->Image=(gcnew 
System::Drawing::Bitmap(zoomedImage->width,zoomedImage->height,zoomedImage->widthStep, 
System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)zoomedImage->imageData));

但是 zoomedImage 仍然显示为 B/W,我听说当真彩色图像转换为灰色时,它不能再次作为真彩色图像返回,那么 CV_GRAY2RGB 是做什么的?

4

2 回答 2

5

当您将 RGB 图像转换为灰度图像时,颜色信息会丢失,并且无法再次从灰度图像中恢复此信息。

当您尝试将 B/W 图像转换为 RGB 时,您只会制作 3 通道图像,但所有通道都包含相同的强度数据。因此,您将获得具有 3 个通道的灰度图像。而已。

于 2012-05-18T20:34:32.203 回答
0

我已经解决了我的问题如下:

将原始图像转换为黑白

             int width=zoomedImage->width;
             int height=zoomedImage->height;
             ColorSaver=cvCreateImage(cvSize(width,height),zoomedImage->depth,zoomedImage->nChannels);
             ColorSaver=cvCloneImage(zoomedImage);
             TempImage=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
             cvCvtColor(zoomedImage, TempImage,CV_RGB2GRAY);
             cvThreshold( TempImage, TempImage,128,256,CV_THRESH_BINARY);
             cvCvtColor( TempImage,zoomedImage,CV_GRAY2RGB);
             this->pictureBox1->Image=(gcnew 

System::Drawing::Bitmap(zoomedImage->width,zoomedImage->height,zoomedImage->widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)zoomedImage->imageData));

将原始图像返回为 RGB:

zoomedImage=cvCloneImage(ColorSaver);
this->pictureBox1->Image=(gcnew 
System::Drawing::Bitmap( zoomedImage->width, zoomedImage->height, zoomedImage->widthStep, 
System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr) zoomedImage->imageData));
于 2012-05-19T11:05:37.123 回答