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