C# 操作 OpenCV 进行视频捕获 (条记)

时间:2022-02-05 08:35:23

标签:

原文:C# 操作 OpenCV 进行视频捕获 (条记)

简介

这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的。

这将有助于那些喜欢C#和OpenCV环境的人。这个措施完全基于Visual Studio 2010 version C#.NET环境。这个措施展示了怎样用C#.NET环境的Visual Studio 2010 IDE编写OpenCV,这个措施是一个怎样用Visual Studio 2010,C#.NET创建措施的例子。

在这篇文章中,我解释了怎样配置Visual Studio 2010,一种配置计算机环境变量EmguCV2.4.9以便运行OpenCV措施的法式

EmguCV:让我们开始事情吧。。。

EmguCV 是一个跨平台的运行OpenCV图形库的壳。它允许从.NET语言例如C#,VB,VC++中挪用OpenCV函数,这个壳可以用Mono编译,在Windows,Linux,Mac OS X,iPhone,iPad 和Android 设备中运行。

EmguCV是用C#编写的。可以在Mono中编译,所以它可以在任何Mono撑持的平台上运行,包孕 Linux, Mac and Android。

 

C# 操作 OpenCV 进行视频捕获 (条记)

pou
翻译于 2年前

2人顶

 翻译的不错哦!

 

筹备 Visual Studio 2010

第 1 步: 安置 EmguCV 2.4.9

下载 EmguCV 2.4.9 版本. 将它安置在 c:\ 磁盘 位置, 不要转变路径, 使用默认的路径“C:\Emgu\emgucv-windows-universal-gpu2.4.9.1847”.

安置路径 – “C:\Emgu\emgucv-windows-universal-gpu2.4.9.1847”.

所有的框框都选上,全包安置.

第 2 步: 设置环境变量:

在用户和系统变量中设置如下的三个路径.

C:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin;

C:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin\x64;

C:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin\x86;

第 3 步: 配置 Visual Studio 2010:

创建一个新的 Windows Application 项目,定名为‘Two Layer’.

选择引用, 右键点击添加引用.

选择 Browse 选项卡, 找到“C:\Emgu\emgucv-windows-universal-gpu2.4.9.1847\bin”, 选择“Emgu.CV.dll”,”Emgu.CV.UI.dll”,”Emgu.Util.dll” 三个文件, 并点击ok.

引用就会在Solution Explorer中呈现.

 

C# 操作 OpenCV 进行视频捕获 (条记)

leoxu
翻译于 2年前

0人顶

 翻译的不错哦!

 

捕获视频

捕获视频成果,捕获视频有两种方法,一种是从摄像机捕获,,第二种是从视频文件捕获。接下来的部分,代码会向你展示如果从摄像机捕获视屏.

在这一节中, 捕获, FRAME PER SECOND 设置为 30 FPS, 视频文件捕获的高和宽分袂设置为 240, 320 . 然后video_seek 被初始化为零 ‘0‘, 这个视频搜寻控制会在视频限制的低位和高位之间搜索视频.

下面的语句在应用措施中最有用. 它有点像多线程. 当应用措施进入到空闲状态,"ProcessFrame" 就会一直挪用直到视频帧结束或者直到帧不为 ‘null‘.


1

 

Application.Idle += ProcessFrame;

 

在从视频文件捕获的代码中,我们需要总帧数来设置视频搜寻控制的上限. FOURCC 被用来找到多媒体的编码解码器名称.

 

C# 操作 OpenCV 进行视频捕获 (条记)

leoxu
翻译于 2年前

0人顶

 翻译的不错哦!

 
从摄像机捕获的代码


#region cameracapture

   if (comboBox1.Text == "Capture From Camera")

   {

     try

     {

       _capture = null;

       _capture = new Capture(0);

       _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS, 30);

       _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 240);

       _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 320);

       Time_Label.Text = "Time: ";

       Codec_lbl.Text = "Codec: ";

       Frame_lbl.Text = "Frame: ";

       webcam_frm_cnt = 0;

       cam = 1;

       Video_seek.Value = 0;

       Application.Idle += ProcessFrame;

       button1.Text = "Stop";

       comboBox1.Enabled = false;

     }

     catch (NullReferenceException excpt)

     {

        MessageBox.Show(excpt.Message);

     }

   }

#endregion cameracapture

 
从视频文件捕获的代码


#region filecapture

   if (comboBox1.Text == "Capture From File")

   {

     openFileDialog1.Filter = "MP4|*.mp4";

     openFileDialog1.FileName = "";

     if (openFileDialog1.ShowDialog() == DialogResult.OK)

     {

      try

      {

        _capture = null;

        _capture = new Capture(openFileDialog1.FileName);

        _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, 240);

        _capture.SetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, 320);

        FrameRate = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FPS);

        TotalFrames = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT);

        codec_double = _capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FOURCC);

        string s = new string(System.Text.Encoding.UTF8.GetString

        (BitConverter.GetBytes(Convert.ToUInt32(codec_double))).ToCharArray());

        Codec_lbl.Text = "Codec: " + s;

        cam = 0;

        Video_seek.Minimum = 0;

        Video_seek.Maximum = (int)TotalFrames - 1;

        Application.Idle += ProcessFrame;

        button1.Text = "Stop";

        comboBox1.Enabled = false;

      }

      catch (NullReferenceException excpt)

      {

         MessageBox.Show(excpt.Message);

      }

    }

  }

#endregion filecapture

 
措置惩罚惩罚图像