0

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

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

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

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

我也尝试像这样创建我的图像:

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

发生同样的错误。=\

请帮忙。

谢谢你。

[编辑1]

问题是缺少一个 *.dll。如果您查看 EmguCV wiki 上的教程,您会看到他们建议您将一些 *.dll 复制到您的调试文件夹中。好吧,我做到了,还有更多,emgu 的文件夹中有 22 个 *.dll,我复制了 21 个 .. 问题是缺少 *.dll 一个菜鸟移动 .. 所以不要忘记复制那些 *.dll

4

1 回答 1

0

如果您在此行遇到异常:

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

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

或者它可能是一个对齐问题。

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

于 2013-07-17T22:52:09.177 回答