1

for ループを使用して、フォルダー C:\Users\crowds\Documents\Example に画像を保存したいと考えています。また、次のように保存する名前も必要です:Sample.jpg、Sample1.jpg

どうすれば実装できますか?

ここに私のコードスニペットがあります:

private void button4_Click(object sender, EventArgs e)
    {
        var capture = new Emgu.CV.Capture();

        using (var ImageFrame = capture.QueryFrame())
        {
            if (ImageFrame != null)
            {
                pictureBox1.Image = ImageFrame.ToBitmap();
                ImageFrame.Save(@"C:\Users\crowds\Documents\Example\Sample.jpg");

            }
            _capture.Dispose();
        }
4

4 に答える 4

1

これを次のように試すことができます。

List<Image> imageList = //Get all the image list
for(i=0; i<imageList.Count;i++) 
 { 
   ImageFrame.Save(@"C:\Users\crowds\Documents\ExampleSample"+i.toString()+".jpg");           
 }
于 2013-10-12T12:21:21.683 に答える
0

コメントに基づいて、次のようなことができるたびに別のファイル名に保存したいだけの場合:

private int filenumber = 0;

private void button4_Click(object sender, EventArgs e)
{   
    using (var capture = new Emgu.CV.Capture())
    using (var ImageFrame = capture.QueryFrame())
    {
        if (ImageFrame != null)
        {
            pictureBox1.Image = ImageFrame.ToBitmap();
            ImageFrame.Save(String.Format(@"C:\Users\crowds\Documents\Example\Sample{0}.jpg", filenumber++));       
        }   
    }
}

このコードは、ファイルの事前存在をチェックするだけでなく、既に存在する場合は例外をスローする可能性があることに注意してください。理想的には、最初に使用して確認する必要がありますFile.Exists(...)

于 2013-10-12T12:21:29.763 に答える
0

それを試してみてください

string root="C:\Users\crowds\Documents\Example\Sample";
for(int i=0;i<value;i++)
{ 
    string path=root+i+".jpg"; ImageFrame.Save(path);
}

より良いデバッグを行います。

于 2013-10-12T12:16:51.693 に答える
0

EMGU CVライブラリは、キャプチャ デバイスからキャプチャ イメージを作成し、好きなように管理します。あなたの例は、ボタンを押して画像を保存しようとしており、画像のコレクションを繰り返し処理していません。

あなたが調べたいと思うかもしれないのは、counter mechanismあなたが維持しているものです。たとえば、ボタンを押すとき、またはアプリケーションの初期化時に、directory画像を含む を読み取り、名前を解析して、最後に保存された画像の名前を決定します。number画像名の一部を取得し、それを使用して を初期化しcounter、ボタンを押して画像を保存するたびにカウンターをインクリメントします。

以下の簡単な例:

カウンター

private int lastSaveCount = 0;

Button_Clickこれは、イベントと以下のInitialise Counterメカニズムの両方がアクセスできる場所である必要があります。

カウンターの初期化

var files = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Example\", @"Sample*.jpg").ToList();
foreach (var file in files)
{
    var split = Regex.Split(file, @"[a-zA-Z]{1,}([\d]{1,}).jpg", RegexOptions.IgnoreCase);
    var save = 0;
    if (Int32.TryParse(split[1], out save))
    {
        lastSaveCount = save > lastSaveCount ? save : lastSaveCount;
    }
}

上記を適切な場所に配置します。

ボタンを押す

private void button4_Click(object sender, EventArgs e)
{
    var capture = new Emgu.CV.Capture();

    using (var ImageFrame = capture.QueryFrame())
    {
        if (ImageFrame != null)
        {
            lastSaveCount++;
            pictureBox1.Image = ImageFrame.ToBitmap();
            var filename = string.Format(@"C:\Users\crowds\Documents\Example\Sample{0}.jpg", lastSaveCount);
            ImageFrame.Save(filename);

        }
        _capture.Dispose();
    }
}
于 2013-10-12T13:27:49.677 に答える