OpenCV从黑白转换为RGB

OpenCV convert from B/W to RGB

本文关键字:RGB 转换 黑白 OpenCV      更新时间:2023-10-16

我已经将图像从RGB转换为黑白,然后我想将其转换回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该怎么办?

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

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

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

将原始图像转换为黑白

             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 

系统::D rawing::位图(缩放图像->宽度,缩放图像->高度,缩放图像->宽度步长,System::D rawing::Imaging::P ixelFormat::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));