使用EmguCv播放指定视频

来源:互联网 发布:世界网络银行商城手机 编辑:程序博客网 时间:2024/05/21 00:54

用Capture来加载一个视频。
用GetCaptureProperty函数可以获取这个视频的各种属性。
然后用Application.Idle来连续的显示视频中的帧(显示出一帧了,程序进入空闲,就继续加载下一帧)
由于视频中的帧太多,.net的垃圾回收机制赶不上,就使用GC.Collect();来强制回收垃圾,可以把程序的内存占用从700MB降到100MB左右

public partial class Form1 : Form    {        Capture cap;        int fps;        public Form1()        {            InitializeComponent();            OpenFileDialog openFileDialog = new OpenFileDialog();            openFileDialog.Filter = "MP4文件|*.mp4|AVI文件|*.avi|RMVB文件|*.rmvb|WMV文件|*.wmv|MKV文件|*.mkv|所有文件|*.*";            if (openFileDialog.ShowDialog() == DialogResult.OK)            {                Application.Idle += Application_Idle;                cap = new Capture(openFileDialog.FileName);                fps =(int) cap.GetCaptureProperty(CapProp.Fps);            }        }        private void Application_Idle(object sender, EventArgs e)        {            Mat a = cap.QueryFrame();            if (a != null)            {                System.Threading.Thread.Sleep((int)(1000.0 / fps - 5));                imageBox1.Image = a;                GC.Collect();            }        }    }

效果图:
这里写图片描述

0 0