グレー スケール イメージの各ピクセルの値をテキスト ファイルに保存しようとしています。たとえば、ピクセル位置 (x, y) の値が 255 (純白) の場合、テキスト ファイルの対応する座標に 255 が保存されます。
これが私のコードです。これは、x86 マシン上の Emgu CV 2.4.0、MSFT Visual Studio 2010、および MSFT .NET 4.0 の WinForm アプリケーションです。
OpenFileDialog OpenFile = new OpenFileDialog();//open an image file.
if (OpenFile.ShowDialog() == DialogResult.OK)
{
Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(OpenFile.FileName);//Read the file as an Emgu.CV.Structure.Image object.
Image<Gray, Byte> MyImageGray = new Image<Gray, Byte>(My_Image.Width, My_Image.Height);//Initiate an Image object to receive the gray scaled image.
CvInvoke.cvCvtColor(My_Image.Ptr, MyImageGray.Ptr, COLOR_CONVERSION.CV_RGB2GRAY);//convert the BGR image to gray scale and save it in MyImageGray
CvInvoke.cvNamedWindow("Gray");
CvInvoke.cvShowImage("Gray", MyImageGray.Ptr);
StreamWriter writer = File.CreateText("test.txt");//Initiate the text file writer
Gray pixel;
//try to iterate through all the image pixels.
for (int i = 0; i < MyImageGray.Height; i++)
{
for (int j = 0; j < MyImageGray.Width; j++)
{
pixel = MyImageGray[j, i];
Console.WriteLine(string.Format("Writing column {0}", j));//debug output
writer.Write(string.Format("{0} ",pixel.Intensity));
}
writer.WriteLine();
}
}
実行しようとしましたが、何らかの理由で、i=0 および j=MyImageGray.Width-1 の後でスタックしました。次の行を処理する必要がありますが、Visual Studio 2010 全体とアプリケーションがフリーズします。凍結とは、アプリケーションのウィンドウを移動できず、VS のカーソルも移動できないことを意味します。Shift+F5 を押してアプリケーションを強制終了する必要があります。一方、(0, 414) ピクセルを読み取っているときに、「型 'Emgu.CV.Util.CvException' の初回例外が Emgu.CV.dll で発生しました」というメッセージが表示されました。実際、デバッグ メッセージは次のようになります。
Writing column 413
WritinA first chance exception of type 'Emgu.CV.Util.CvException' occurred in Emgu.CV.dll
g column 414
Writing column 415
i=MyImageGray.Width-1 にブレーク ポイントを設定しようとしましたが、ブレーク ポイントに到達する前にプログラムがフリーズしたようです。私のアプローチの何が問題なのか、私には本当にわかりません。任意のアイデアをいただければ幸いです。リクエストに応じて、より多くの情報を提供させていただきます。よろしくお願いします!