這段時間 在研究圖像識別的相關知識. 在網上看到了這個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 }