2013-07-17 42 views
0

我正在使用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文件複製到debug文件夾中。那麼我做了更多,在emgu的文件夾中有22 * .dlls,我複製了21 ..並且問題是缺少* .dll one noob move ..所以不要忘記複製那些* .dlls

+0

什麼異常?可能你的庫只支持某些像素格式,或者需要對齊,或者類似的東西。 –

回答

0

如果你在這條線的異常:

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

什麼是frame.Widthframe.Heightstride值。有些系統使用負高度或負跨度來區分自上而下和自下而上的像素順序,您的圖書館可能會對此感到不滿。

或者它可能是一個對齊問題。

在調試器中設置一個斷點,並確切地看到您要求庫執行的操作。

+0

謝謝。現在它的工作。 – Probst

+0

@Probst:那麼,問題是什麼?你怎麼修好它的?提供信息,以便這個問題也可以幫助未來的程序員。 –

相關問題