0

画像を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は何をしますか?

4

2 に答える 2

5

RGB画像をグレーレベル画像に変換すると、色情報が失われ、この情報をグレーレベル画像から再度復元することはできません。

白黒画像を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 に答える