标签:emgucv
用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();
}
}
}
效果图:
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:emgucv
原文地址:http://blog.csdn.net/qq_22033759/article/details/48054133