使用 for 循环将图像保存在文件夹中

本文关键字:存在 文件夹 保存 图像 for 循环 使用 | 更新日期: 2023-09-27 18:34:57

我想使用 for 循环将图像保存在文件夹 C:''Users''crowds''Documents''Example 中。我还希望名称像这样保存:样品.jpg,样品1.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();
        }

使用 for 循环将图像保存在文件夹中

你可以试试这样:

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");           
 }

试试吧

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

并更好地调试更多。

根据您的评论,如果您只是想每次都保存到不同的文件名,您可以执行以下操作:

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(...)进行检查

EMGU CV 库从捕获设备创建捕获映像,然后您可以根据需要对其进行管理。 您的示例尝试在按下按钮时保存图像,而不是循环访问图像集合。

您可能想要查看的是维护的counter mechanism。 例如,当您按下按钮或在应用程序初始化时,您读取包含图像的directory并解析名称以确定上次保存的图像的名称。 获取图像名称的number部分并使用它来初始化您的counter,然后每次按下按钮保存图像时,递增计数器。

下面是一个简化的示例:

计数器

private int lastSaveCount = 0;

这需要是您的Button_Click事件和下面的初始化计数器机制都可以访问的位置。

初始化计数器

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();
    }
}