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
私の質問は..最初のケースで、画像を a にロードして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);
同じエラーが発生します。=\
助けてください。
ありがとうございました。
[編集1]
問題は、*.dll が 1 つ見つからないことでした。EmguCV wiki のチュートリアルを見ると、いくつかの *.dll をデバッグ フォルダーにコピーすることをお勧めしていることがわかります。emgu のフォルダーには 22 個の *.dll があります。