0

グレー スケール イメージの各ピクセルの値をテキスト ファイルに保存しようとしています。たとえば、ピクセル位置 (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 にブレーク ポイントを設定しようとしましたが、ブレーク ポイントに到達する前にプログラムがフリーズしたようです。私のアプローチの何が問題なのか、私には本当にわかりません。任意のアイデアをいただければ幸いです。リクエストに応じて、より多くの情報を提供させていただきます。よろしくお願いします!

4

1 に答える 1

2

そのようにピクセル値にアクセスする場合は、pixel = MyImageGray[i, j];代わりにpixel = MyImageGray[j, i];. 最初のインデックスは行で、2 番目のインデックスは列です。

それが役立つことを願っています。

于 2012-06-28T13:40:46.143 に答える