我正在使用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时:
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
答案 0 :(得分:0)
如果你在这一行得到例外:
Image<Gray, Byte> emguImg = new Image<Gray, byte>((int)frame.Width, (int)frame.Height, stride, frame.ImageBuffer);
frame.Width
,frame.Height
和stride
的值是多少?有些系统使用负高度或负步幅来区分自上而下和自下而上的像素顺序,而您的图书馆可能对此不满意。
或者它可能是对齐问题。
在调试器中设置断点,并准确查看您要求库执行的操作。