这段时间 在研究图像识别的相关知识. 在网上看到了这个OpenCv 图像识别的开源库.功能十分的强大 .目前很多的AR技术都是基于此库. 但这个库主要是由C来编写. 对于刚刚接触的我. 入门有些难度. 但可喜的是. 此库被封装成.Net Framework 有多个版本. 我是选择了OpenCvSharp 这个封装库来学习的. (因为最开始看的一个老外的教程就是用的这个. 先入为主). 在此记下学习笔记. 以备之后回忆:

 

 对于初学者来说. 我觉得最困扰我的不是OpenCvSharp本身. 而是如何部署这个开源的库. 因为我机器上没有安装Visual Studio 所以一直没有去试. 我直接使用了别人源码中的运行库. 这样使用简单多了.(这个本想把 Runtime 传上来. 但由于很晚了. 所以之后再传)

 

  正式我的第一个学习例子: 使用OpenCvSharp来播放视频:

  1.首先: 引用 OpenCvSharp.dll ,并在程序中using OpenCVsharp; 再把Runtime 中的所有文件 复制到Debug文件夹中.. 这就完了.

// 视频地址
             string videoPath = @"F:\学习\一个视频.avi";
             // 视频帧率
             int interval = 25;
             // 使用CvWindow 类来创建一个窗口 参数为Title.
             using(CvWindow win = new CvWindow("Capture Video :"))  // 使用Using是因为此库中的绝大部分类都实现了IDispose接口. 这样省得我们还                                  // 要在程序的 最后 destroy ,close release... 等等的操作了.
    // 这里使用CvCapture 类的FromFile 方法来读这个视频.这个类的FromCamera方法可以直接捕捉摄像头图像 ,非常的有用.且方便
                 using(CvCapture video = CvCapture.FromFile(videoPath)) 
             {
                 // 根据帧率得到每帧停留时间      // 其实 这里 的interval 用video.Fps 获取更好. (因为是后知道的. 呵呵 )
                 int delayTime = 1000// while 循环播放视频
      // CvWindow 的WaitKey方法 delayTime 是毫秒. WaitKey 也是为了来处理输入事件 . 如果没有它.直接while(true) 程序就卡死了.
                 while (CvWindow.WaitKey(delayTime) < 0) {        // 使用queryFrame()方法把视频的下一帧读到内存并显示出来.
                     win.Image = video.QueryFrame();
                 }
             }

    

opencvsharp 暂停 opencvsharp视频教程_ide

opencvsharp 暂停 opencvsharp视频教程_ide_02

View Code

1 using System;
 2 using OpenCvSharp;
 3 
 4 namespace CaptureVideo
 5 {
 6     public class Program
 7     {
 8         static void Main()
 9         {
10             // 视频地址
11             string videoPath = @"F:\学习\一个POLY建模脚本的演示.avi";
12             // 视频帧率
13 //int interval = 25;
14             
15             using(CvWindow win = new CvWindow("Capture Video :"))
16                 using(CvCapture video = CvCapture.FromFile(videoPath))
17             {
18                 // 根据帧率得到每帧停留时间
19 //int delayTime = 1000 / interval;
20                 int delayTime = 1000 / (int)video.Fps;
21                 
22                 // while 循环播放视频
23                 while (CvWindow.WaitKey(delayTime) < 0) {
24                     win.Image = video.QueryFrame();
25                 }
26             }
27         }
28     }
29 }