这段时间 在研究图像识别的相关知识. 在网上看到了这个OpenCv 图像识别的开源库.功能十分的强大 .目前很多的AR技术都是基于此库. 但这个库主要是由C来编写. 对于刚刚接触的我. 入门有些难度. 但可喜的是. 此库被封装成.Net Framework 有多个版本. 我是选择了OpenCvSharp 这个封装库来学习的. (因为最开始看的一个老外的教程就是用的这个. 先入为主). 在此记下学习笔记. 以备之后回忆:
对于初学者来说. 我觉得最困扰我的不是OpenCvSharp本身. 而是如何部署这个开源的库. 因为我机器上没有安装Visual Studio 所以一直没有去试. 我直接使用了别人源码中的运行库. 这样使用简单多了.(这个本想把 Runtime 传上来. 但由于很晚了. 所以之后再传)
正式我的第一个学习例子: 使用OpenCvSharp来播放视频:
1.首先: 引用 OpenCvSharp.dll ,并在程序中using OpenCVsharp; 再把Runtime 中的所有文件 复制到Debug文件夹中.. 这就完了.
2. // 视频地址
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 / interval;
// while 循环播放视频
// CvWindow 的WaitKey方法 delayTime 是毫秒. WaitKey 也是为了来处理输入事件 . 如果没有它.直接while(true) 程序就卡死了.
while (CvWindow.WaitKey(delayTime) < 0) {
// 使用queryFrame()方法把视频的下一帧读到内存并显示出来.
win.Image = video.QueryFrame();
}
}
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 }