クラスとは何か、Image<Gray, byte>
どのように実装されているのかはよくわかりませんが、コンストラクターにを渡しています。string
これが正しいかどうかはわかりますか?(編集:それがEMGU実装の一部であることがわかりました)。ストリームから通常どのように画像を作成するかを説明します。
MemoryStream ms = dict["mypicture.png"]; // This gives you the memory stream from the dictionary
ms.Seek(0, SeekOrigin.Begin); // Go to the beginning of the stream
Bitmap bmp = new Bitmap(ms); // Create image from the stream
次のコンストラクターを使用して、使用しているストリームから新しい「emguイメージ」を作成したいと思います。
Image<Bgr, Byte> img1 = new Image<Bgr, Byte>("MyImage.jpg");
これは、EMGUのドキュメントによると、ファイルから画像を読み取ることになっています。「mypicture.png」という名前のファイルはありません。辞書内に「mypicture.png」というキーの下にストリームがありますが、これはまったく異なるものです。クラスがストリームから読み取ることができるかどうかは疑わしいImage<t1, t2>
です-少なくとも、ドキュメントにはそのようなものはありませんでした。
あなたが呼び出す必要があるのは(私が上で提供したコードを使用して):
Image<Gray, Byte> img1 = new Image<Gray, Byte>(bmp);
そうは言っても、Draw
メソッドのコード(ちなみに静的にすることはできません)は次のようになります。
private Bitmap GetBitmapFromStream(String bitmapKeyName)
{
MemoryStream ms = dict[bitmapKeyName];
ms.Seek(0, SeekOrigin.Begin);
return new Bitmap(ms);
}
public Image<Bgr, Byte> Draw(String modelImageFileName, String observedImageFileName, out long matchTime,int i)
{
Image<Gray, Byte> modelImage = new Image<Gray, byte>(GetBitmapFromStream(modelImageFileName));
Image<Gray, Byte> observedImage = new Image<Gray, byte>(GetBitmapFromStream(observedImageFileName));
}
編集
以下のコメントで、ディスクに書き込む代わりにビットマップをメモリストリームに保存することにより、処理時間を短縮したいとおっしゃっています。
私はあなたに次のことを尋ねる必要があります:なぜあなたはそもそもそれをするのですか?あなたが上に投稿したコードから、明らかにあなたはすでにBitmap
メモリストリームに保存しているものを持っていることに気づきました。ビットマップ自体を辞書に入れてみませんか?
Dictionary<string, Bitmap> dict = new Dictionary<string, Bitmap>();
dict.Add("mypicture.png", bmp);
そうすれば、ストリームからの画像の保存と読み取りに費やされる時間をさらに短縮して、すぐに取得できます。そのDraw
場合、メソッドは次のようになります。
public Image<Bgr, Byte> Draw(String modelImageFileName, String observedImageFileName, out long matchTime,int i)
{
Image<Gray, Byte> modelImage = new Image<Gray, byte>(dict[modelImageFileName);
Image<Gray, Byte> observedImage = new Image<Gray, byte>(dict[observedImageFileName]);
}