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

发布于 2024-09-17 19:32:24 字数 410 浏览 2 评论 0原文

如何将单通道 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。谢谢。

How can I convert single channel IplImage (grayscale), depth=8, into a Bitmap?
The following code runs, but displays the image in 256 color, not grayscale. (Color very different from the original)

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

I believe my problem lies in the PixelFormat. Ive tried scaling the image to 16bit and setting the pixel format to 16bppGrayscale, but this crashes the form when uploading the image.

The destination is a PicturePox in a C# form.Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扎心 2024-09-24 19:32:24

您需要创建 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);

}

You need to create ColorPalette instance, fill it with grayscale palette and assign to btmap->Palette property.

Edit: Actually, creating ColorPalette class is a bit tricky, it is better to modify color entries directly in btmap->Palette. Set these entries to RGB(0,0,0), RGB(1,1,1) ... RGB(255,255,255). Something like this:

ColorPalette^ palette = btmap->Palette;


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


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

{

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

}
绿光 2024-09-24 19:32:24
 int intStride = (AfterHist.width * AfterHist.nChannels + 3) & -4;
            Bitmap BMP = new Bitmap(AfterHist.width,
                            AfterHist.height, intStride,
                            PixelFormat.Format24bppRgb, AfterHist.imageData);

这种方法可以正确地创建 IPLimage 的位图。

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

this way is correct to create a bitmap of a IPLimage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文