【问题标题】:OpenCV convert from B/W to RGBOpenCV 从 B/W 转换为 RGB
【发布时间】:2012-05-29 20:37:44
【问题描述】:

我已将图像从 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仍然显示为黑白,我听说当真彩色图像转换为灰色时,它不能再次作为真彩色图像返回,那么CV_GRAY2RGB是做什么的?

【问题讨论】:

    标签: c++ image-processing opencv


    【解决方案1】:

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

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

    【讨论】:

    • 你应该保持原来的彩色图像。否则自然不可能从灰度图像中得到颜色信息。考虑一下:在原始图像中,一个像素有 r=20, g = 50, b = 80。当您将此图像转换为灰度级时,您会得到一个强度值 50 可以说。然后,当您将图像转换回 rgb 时,您得到的是 r = 50,g = 50,b = 50。这与原始值完全不同。从这个例子可以看出,如果你没有在某处保留原始颜色信息,你就无法从灰度图像中恢复颜色信息。
    • 我试过了:ColorSaver=cvCreateImage(cvSize(width,height),zoomedImage->depth,zoomedImage->nChannels); ColorSaver=cvCloneImage(zoomedImage);
    • 其实你可以使用原版zoomedImage,不需要更多。只需删除 B/W 到 RGB 转换部分。
    • @Eslam,试图恢复颜色就像试图解读鸡蛋。永远不会发生。
    • @ViZier 如何删除黑白到 RGB 的转换部分,我需要它!
    【解决方案2】:

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

    将原始图像转换为黑白

                 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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多