转换位图时出错

本文关键字:出错 位图 转换 | 更新日期: 2023-09-27 18:23:35

我正在使用EmguCV创建直方图,为此,我需要Bitmap来创建Image<Gray, Byte>

当我将图像从文件加载到位图变量时,如下所示:

Bitmap bmpImg = new Bitmap(filepath);

Image<Gray, Byte> emguImg = new Image<Gray, byte>(bmpImg);

图像创建工作良好,我可以显示图像。然而,我需要从我的相机的结构中创建这个图像Image<Gray, Byte> emguImg

public struct tFrame
{
    public IntPtr AncillaryBuffer;
    public uint AncillaryBufferSize;
    public uint AncillarySize;
    public tBayerPattern BayerPattern;
    public uint BitDepth;
    public tFrameCtx Context;
    public tImageFormat Format;
    public uint FrameCount;
    public uint Height;
    public IntPtr ImageBuffer;
    public uint ImageBufferSize;
    public uint ImageSize;
    public uint RegionX;
    public uint RegionY;
    public tErr Status;
    public uint TimestampHi;
    public uint TimestampLo;
    public uint Width;
}

当我创建这样的位图时:

Bitmap bmpImg = new Bitmap((int)frame.Width, (int)frame.Height, stride, pxFormat, frame.ImageBuffer);

我可以在将此图像转换为BitmapSource后显示它,所以我假设在这之前我的代码是正确的。

当我尝试这样做时:

Image<Gray, Byte> emguImg = Image<Gray, byte>(bmpImg);

我收到一个错误,来自Emgu.CV.CvInvoke 的异常

我的问题是。。为什么在第一种情况下,当我将图像加载到Bitmap并将此图像传递给Image<Gray, Byte>时,一切都很好,但当我从结构中创建Bitmap并将其传递给Image<Gray, Byte>时,我会得到这个异常?

我还试着创建这样的图像:

Image<Gray, Byte> emguImg = new Image<Gray, byte>((int)frame.Width, (int)frame.Height, stride, frame.ImageBuffer);

出现同样的错误

请帮忙。

谢谢。

[edit1]

问题是缺少一个*.dll。如果你在EmguCV wiki上查看教程,你会发现他们建议你将一些*.dll复制到调试文件夹中。我做了很多,emgu的文件夹里有22个*.dll,我复制了21个。。问题是缺少*.dll一个小动作。。所以不要忘记复制那些*.dlls

转换位图时出错

如果您在这一行上得到异常:

Image<Gray, Byte> emguImg = new Image<Gray, byte>((int)frame.Width, (int)frame.Height, stride, frame.ImageBuffer);

frame.Widthframe.Heightstride的值是多少。有些系统使用负高度或负步幅来区分自上而下和自下而上的像素顺序,您的库可能对此不满意。

或者这可能是一个结盟问题。

在调试器中设置一个断点,并查看您要求库执行的操作。