目录
一、前言
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();
}
}