C#使用EmguCV播放视频

目录

一、前言

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();
            }
        }

猜你喜欢

转载自blog.csdn.net/panjinliang066333/article/details/132103870
今日推荐