如何将单通道IplImage *转换为位图^

时间:2010-09-07 06:54:42

标签: image bitmap opencv picturebox

如何将单通道IplImage(灰度)(深度= 8)转换为位图? 运行以下代码,但以256色而非灰度显示图像。 (颜色与原始颜色非常不同)

btmap = gcnew Bitmap(
 cvImg->width , 
 cvImg->height , 
 cvImg->widthStep , 
 System::Drawing::Imaging::PixelFormat::Format8bppIndexed,
 (System::IntPtr)cvImg->imageData)
 ;

我相信我的问题在于PixelFormat。我已经尝试将图像缩放到16位并将像素格式设置为16bppGrayscale,但这会在上传图像时崩溃。

目的地是C#形式的PicturePox。谢谢。

2 个答案:

答案 0 :(得分:1)

您需要创建ColorPalette实例,用灰度调色板填充它并分配给btmap-> Palette属性。

编辑:实际上,创建ColorPalette类有点棘手,最好直接在btmap-> Palette中修改颜色条目。将这些条目设置为RGB(0,0,0),RGB(1,1,1)... RGB(255,255,255)。像这样:

ColorPalette^ palette = btmap->Palette;


array<Color>^ entries = palette->Entries;


for ( int i = 0; i < 256; ++i )

{

   entries[i] = Color::FromArgb(i, i, i);

}

答案 1 :(得分:1)

 int intStride = (AfterHist.width * AfterHist.nChannels + 3) & -4;
            Bitmap BMP = new Bitmap(AfterHist.width,
                            AfterHist.height, intStride,
                            PixelFormat.Format24bppRgb, AfterHist.imageData);

这种方法对于创建IPLimage的位图是正确的。