使用 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();
}
你可以试试这样:
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();
}
}