C#+EmguCV使用攝像頭讀取、保存視頻
本文實(shí)例為大家分享了C#+EmguCV使用攝像頭讀取、保存視頻的具體代碼,供大家參考,具體內(nèi)容如下
在Emgucv中調(diào)用攝像頭需要用到VideoCapture類
這個(gè)類有四種重載的方式
1、不寫參數(shù),那么初始化的時(shí)候就會(huì)調(diào)用默認(rèn)的攝像頭
2、一個(gè)int類型的數(shù)字,這個(gè)數(shù)字的含義是攝像頭的索引。會(huì)按照索引來初始化攝像頭
3、一個(gè)字符串,這個(gè)字符串的含義是文件名或視頻流名。初始化會(huì)讀取視頻文件或視頻流
4、CaptureType 的枚舉
這個(gè)枚舉的內(nèi)容很多,這里不再贅述
新建一個(gè)控制臺應(yīng)用程序來實(shí)現(xiàn)視頻的讀取和保存,代碼如下
class Program ? ? { ? ? ? ? static void Main(string[] args) ? ? ? ? { ? ? ? ? ? ? show(); ? ? ? ? } ? ? ? ? ? private static void show() ? ? ? ? { ? ? ? ? ? ? //VideoCapture cap = new VideoCapture("AVSEQ02.avi"); ? ? ? ? ? ? //VideoCapture cap = new VideoCapture(CaptureType.Any); ? ? ? ? ? ? VideoCapture cap = new VideoCapture(); ? ? ? ? ? ? VideoWriter writer = new VideoWriter("save.avi", 20, new Size(640, 480), true); ? ? ? ? ? ? if (!cap.IsOpened) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Console.WriteLine("打開失敗"); ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? } ? ? ? ? ? ? Mat mat = new Mat(); ? ? ? ? ? ? while (true) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? cap.Read(mat); ? ? ? ? ? ? ? ? if (mat.IsEmpty) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? Console.WriteLine("讀取完畢"); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? CvInvoke.Imshow("video", mat); ? ? ? ? ? ? ? ? writer.Write(mat); ? ? ? ? ? ? ? ? CvInvoke.WaitKey(30); ? ? ? ? ? ? } ? ? ? ? ? ? CvInvoke.WaitKey(0); ? ? ? ? ? } ? ? }
這里用VideoCapture 的Read()方法來讀取視頻的每一幀。保存在Mat這個(gè)對象中。并 CvInvoke.Imshow()出來。然后用VideoWriter的Write方法,把每一幀的圖像保存成視頻。
這里需要注意的地方是:在循環(huán)中需要停留30毫秒,否則視頻顯示不出來。 CvInvoke.WaitKey(30);
運(yùn)行程序后,可以看到,攝像頭讀取的視頻已經(jīng)保存了下來
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#框架winform實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#框架winform實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C#實(shí)現(xiàn)啟動(dòng),關(guān)閉與查找進(jìn)程的方法
這篇文章主要介紹了C#實(shí)現(xiàn)啟動(dòng),關(guān)閉與查找進(jìn)程的方法,通過簡單實(shí)例形式分析了C#針對進(jìn)程的啟動(dòng),關(guān)閉與查找的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11