目录
一、前言
1、简介
2、测试工程代码下载链接
3、EmguCV 库文件下载链接
二、工程环境配置
1、EmguCV控件添加引用
(1)窗口控件添加
(2)相关Dll文件添加添加引用
(3)工程运行基础文件夹添加
(4)调试运行
2、界面设计
(1)整体布局
(2)设置Image相关属性
3、添加相应控件事件程序
(1)全局变量
(2)打开影片
(3)播放和暂停
一、前言
1、简介
EmguCV是C#版本的OpenCV,EmguCV播放视频主要是将视频解析成一帧帧图像画面。每秒钟显示相对应的帧数画面,即可达到视频播放的效果。本质上是很短的时间显示足够多的图像,因此播放过程中没有影片声音。使用该方式播放视频的优势是可以对视频进行精确播放控制
播放控制效果
2、测试工程代码下载链接
https://download.csdn.net/download/panjinliang066333/88167836
3、EmguCV 库文件下载链接
https://download.csdn.net/download/panjinliang066333/85711171
二、工程环境配置
1、EmguCV控件添加引用
创建C# Winform工程
(1)窗口控件添加
工具箱中添加EmguCV选项卡,向EmguCV中添加EmguCV.UI控件
向窗口中添加EmguCV->ImageBox控件,控件背景颜色设置为黑色
(2)相关Dll文件添加添加引用
(3)工程运行基础文件夹添加
将库文件中的X86文件夹复制到程序工程的Debug或者Release文件夹下。不管是X86系统还是X64系统,都要复制该X86文件夹。
(4)调试运行
F5或者启动运行,无错误。
2、界面设计
(1)整体布局
(2)设置Image相关属性
①设置ImageBox控件Enable为False,否则程序运行起来鼠标在控件上滚动会会对图像进行缩放
②设置ImageBox控件SizeMode为Zoom,即根据控件大小调整显示的图像对应的尺寸大小
3、添加相应控件事件程序
(1)全局变量
private MmTimer userTimer = new MmTimer(); //精确定时器Capture cap;int fps; //影片帧率int numFrames; //影片总帧数int videoWidth; //影片宽度int videoHeight; //影片高度int currentFrame = 0; //当前帧double setFrame = 0; //定位到的帧bool isStart = false; //是否播放
(2)打开影片
private void btnOpenFile_Click(object sender, EventArgs e){try{//打开视频OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "MP4文件|*.mp4|AVI文件|*.avi|RMVB文件|*.rmvb|WMV文件|*.wmv|MKV文件|*.mkv|所有文件|*.*";if (openFileDialog.ShowDialog() == DialogResult.OK){txtFileName.Text = openFileDialog.SafeFileName;////Application.Idle += Application_Idle; //事件方式cap = new Capture(openFileDialog.FileName); //读入视频//fps = (int)cap.GetCaptureProperty(CapProp.Fps); //获取视频帧率txtFps.Text = fps.ToString();numFrames = (int)cap.GetCaptureProperty(CapProp.FrameCount); //获取视频总帧数txtFrameNums.Text = numFrames.ToString();videoWidth = (int)cap.GetCaptureProperty(CapProp.FrameWidth); //获取视频宽度txtWidth.Text = videoWidth.ToString();videoHeight = (int)cap.GetCaptureProperty(CapProp.FrameHeight); //获取视频高度txtHeight.Text = videoHeight.ToString();}}catch{MessageBox.Show("操作异常", "提示!!!");}}
(3)播放和暂停
private void btnPlay_Click(object sender, EventArgs e){if (txtFileName.Text == ""){MessageBox.Show("请先打开视频");return;}if (btnPlay.Text == "播放"){isStart = true;btnPlay.Text = "暂停";//cap.SetCaptureProperty(CapProp.PosFrames, currentFrame);txtCurrentFrame.Text = currentFrame.ToString(); //当前播放的帧数Mat a = cap.QuerySmallFrame();imageBox1.Image = a;GC.Collect();PlayTimeSet();}else if (btnPlay.Text == "暂停"){isStart = false;btnPlay.Text = "播放";userTimer.Stop();}}