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

试试看

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 回答
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 回答