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();
}
}
我认为所有下面的答案是正确的(不知道'i'被自动强制转换为字符串,也许一些问题的答案应该纠正这一点,手动投'i' )。我在这里看到的唯一问题是,如果有任何机会存在名称,例如'sample6.jpg'由于某种原因已经存在,并且您想尝试将名称更改为'sample7。jpg',在这种情况下,您必须做得比我在下面的答案中看到的要多一点,但是您最好说明这种情况是否可行。 – Leron
我想要做的是如果我点击按钮,图像将保存为sample0.jpg,如果我再次单击该按钮,名称应该是sample1.jpg –
根据您的评论我更新了我的答案。 – codemonkeh