我正在使用 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