EmguCV_開發學習歷程_1
首先由於EmguCV已經出了太多版了
我們先來分析各個版目前使用人數多寡
來抉擇要使用哪一版
在此我以2014年為分水嶺之前的就不用了!!!!
我先試試最新的3.0吧
使用人數還真多呢!!!!
使用最新版來開發有好有壞
好處是 迎合新趨勢 功能必更方便更齊全
壞處是 較少相關開發文分享 也較難做開發
不過試一試吧 這是難免的
Emgu CV 的 Sourceforge載點連結:
http://sourceforge.net/projects/emgucv/files/emgucv/3.0.0/
在此參考兩篇關於 EmguCV 3.0版的 安裝教程
博客名稱:
Change The World 樓主:cc_sunny
关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)
http://blog.csdn.net/aptx704610875/article/details/46045689
處理EmguCV3.0.0 “Emgu.CV.MatInvoke”的類型初始值設定項引發異常。
http://www.ithao123.cn/content-8808438.html
樓主使用的是 3.0.0-rc1版本
以下參考了這個樓主的部落格來做研究分析
关于EMGU CV的那些事——2.摄像头捕捉(RGB and GRAY)
http://blog.csdn.net/aptx704610875/article/details/46121241
我先照做看看 根據之前經驗發現一直裝失敗的原因就是因為
版本下載的和原作者不同
結果是不太順暢
我們來看看這個錯誤訊息是在講捨麼??
把他放大一些
InvalidOperationException 未處理
之後我們到 stackoverflow 去 爬個文
http://stackoverflow.com/questions/15410700/c-sharp-system-invalidoperationexception
有個老外要寫一個關於TCP/IP客戶端主從式架構(Client–server model)
-----------------------------------客戶端-伺服器(Client/Server)結構簡稱C/S結構
為了使用port和IP位址連結
下面有個老外解答
看到了 一個詞 叫做 「委外」
之後去上網了查了一下
「委外」(delegate) 的意思是捨麼?????
可以安全封裝方法的類型,類似於 C 和 C++ 中的函式指標。與 C 函式指標不同之處在於,委派為物件導向且類型安全,同時安全性較佳。<截自官網>
「封裝」(Encapsulation) 是指 每個人都有個人隱私,若喪失隱私,就會被一覽無遺,毫無秘密可言。
資料的封裝就好比人的隱私。
物件也跟人一樣,都有屬於物件內部的私有部分(屬性、方法)
這些部分必須是外界無法直接存取的!!!!
這樣才能保有物件的完整性
就好比如
Visual C++ 的 .Net 視窗應用程式中,
我們可以用textBox1->Text來存取textBox1文字方塊的Text屬性值
Visual C# 視窗程式中
我們則是用textBox1.Text來存取textBox1文字方塊的Text屬性值
這是照著作者設計出來的視窗
之後回顧一下發現樓主有提到
在子线程里访问父线程里创建的imagebox控件的话,编辑器会抛出异常,原因是怕多线程同时访问控件时出现的死锁等。
死锁就是死結啦!!!
死結(英語:Deadlock),又譯為死結,計算機科學名詞。當兩個以上的運算單元,雙方都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出時,這種狀況,就稱為死結。
在多工系統下,當一個或多個行程等待系統資源,而資源又被行程本身或其它行程占用時,就形成了死結。
樓主一開始先宣告了
Capture cap ; // 用來 產生讀取攝像頭的結構體
再創了兩個Mat型態的空指標,各自用來指向讀取RGB攝像和灰階的一個個frame
分別叫做 (1)frame ,(2) gframe
---------------------------------------------------------------------------------------------------------------
(1)frame 被用在 private void ProcessFrameRgb(){ ... }這個私有方法之中
rgbframenum 初始化為0 主要用來統計(累加)讀取到的彩色frame數
之後用if判別如果 預設的thread1flag 佈林值非 false就代表成功讀取攝像頭
sw1就啟用Start()方法 【sw1 是用Stopwatch 這個類 來宣告】計算累計耗費時間
其實很好辨別哪個是變數哪個是類只要把屬標移至我們的Stopwatch上就會跳出顯示說明框
(2)gframe frame 被用在 private void ProcessFrameGray(){ ... }這個私有方法之中
grayframenum 初始化為0 主要用來統計(累加)讀取到的灰階frame數
sw2跟剛才一樣
重點來了!!!!!
gframe = new Mat(frame.Rows, frame.Cols, Emgu.CV.CvEnum.DepthType.Cv8U, 1);
gframe = new Mat (直行數 , 橫列數 , Emgu.CV.CvEnum.深度型態 , 通道數)
因為灰階所以單通道最後一個參數填1很合理!!!
Emgu.CV.CvEnum是一個命名空間
在別篇樓主部落格中Emgucv相關教學文中
http://gnehcic.azurewebsites.net/category/emgucv/
Emgu.CV.CvEnum後頭好像還可以接其他東西像是 INTER.CV_INTER_LINEAR
不過我們應該可以從這兩句語法推估
他是一個enum型態(列舉型別)
再來看CvInvoke 這個 類
public static void CvtColor(IInputArray src, IOutputArray dst, ColorConversion code, int dstCn = 0);
之後又建立了兩個Thread (線程)這個類,各自用來指向RGB和灰階的frame
一個叫做 RgbThread
被用在 button1的觸發事件 和 button3的觸發事件之中 button3 在寫關攝影頭
大概分析到此
https://msdn.microsoft.com/zh-tw/library/fd85b3df(v=vs.80).aspx
微軟官網上資訊寫著
=====================================================================
之後又發現有兩篇blog作者是寫關於libemgucv-windows-universal-cuda-2.9.0.1922-beta
Visual studio 2013 express 下 安裝 EmguCV - WebCam
http://ezworker2010.blogspot.tw/2014/03/visual-studio-2013-express-emgucv.html
C# visual studio 2012 EmuCV 安裝教學 與 Emgu.CV.CvInvoke 解決
http://vincecc.blogspot.tw/2013/11/c-visual-studio-2012-emucv.html
兩篇 作者皆使用 emgucv 2.4.9 beta
不如試試這版吧
本次分析告一段落
我們先來分析各個版目前使用人數多寡
來抉擇要使用哪一版
在此我以2014年為分水嶺之前的就不用了!!!!
我先試試最新的3.0吧
使用人數還真多呢!!!!
使用最新版來開發有好有壞
好處是 迎合新趨勢 功能必更方便更齊全
壞處是 較少相關開發文分享 也較難做開發
不過試一試吧 這是難免的
Emgu CV 的 Sourceforge載點連結:
http://sourceforge.net/projects/emgucv/files/emgucv/3.0.0/
在此參考兩篇關於 EmguCV 3.0版的 安裝教程
博客名稱:
Change The World 樓主:cc_sunny
关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)
http://blog.csdn.net/aptx704610875/article/details/46045689
處理EmguCV3.0.0 “Emgu.CV.MatInvoke”的類型初始值設定項引發異常。
http://www.ithao123.cn/content-8808438.html
樓主使用的是 3.0.0-rc1版本
以下參考了這個樓主的部落格來做研究分析
关于EMGU CV的那些事——2.摄像头捕捉(RGB and GRAY)
http://blog.csdn.net/aptx704610875/article/details/46121241
我先照做看看 根據之前經驗發現一直裝失敗的原因就是因為
版本下載的和原作者不同
結果是不太順暢
我們來看看這個錯誤訊息是在講捨麼??
把他放大一些
InvalidOperationException 未處理
之後我們到 stackoverflow 去 爬個文
http://stackoverflow.com/questions/15410700/c-sharp-system-invalidoperationexception
有個老外要寫一個關於TCP/IP客戶端主從式架構(Client–server model)
-----------------------------------客戶端-伺服器(Client/Server)結構簡稱C/S結構
為了使用port和IP位址連結
下面有個老外解答
看到了 一個詞 叫做 「委外」
之後去上網了查了一下
「委外」(delegate) 的意思是捨麼?????
可以安全封裝方法的類型,類似於 C 和 C++ 中的函式指標。與 C 函式指標不同之處在於,委派為物件導向且類型安全,同時安全性較佳。<截自官網>
「封裝」(Encapsulation) 是指 每個人都有個人隱私,若喪失隱私,就會被一覽無遺,毫無秘密可言。
資料的封裝就好比人的隱私。
物件也跟人一樣,都有屬於物件內部的私有部分(屬性、方法)
這些部分必須是外界無法直接存取的!!!!
這樣才能保有物件的完整性
就好比如
Visual C++ 的 .Net 視窗應用程式中,
我們可以用textBox1->Text來存取textBox1文字方塊的Text屬性值
Visual C# 視窗程式中
我們則是用textBox1.Text來存取textBox1文字方塊的Text屬性值
這是照著作者設計出來的視窗
之後回顧一下發現樓主有提到
不同的imagebox控件分布在不同的线程里,分别有一个while循环不断的获得视频帧。
在子线程里访问父线程里创建的imagebox控件的话,编辑器会抛出异常,原因是怕多线程同时访问控件时出现的死锁等。
死锁就是死結啦!!!
死結(英語:Deadlock),又譯為死結,計算機科學名詞。當兩個以上的運算單元,雙方都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出時,這種狀況,就稱為死結。
在多工系統下,當一個或多個行程等待系統資源,而資源又被行程本身或其它行程占用時,就形成了死結。
樓主一開始先宣告了
Capture cap ; // 用來 產生讀取攝像頭的結構體
再創了兩個Mat型態的空指標,各自用來指向讀取RGB攝像和灰階的一個個frame
分別叫做 (1)frame ,(2) gframe
---------------------------------------------------------------------------------------------------------------
(1)frame 被用在 private void ProcessFrameRgb(){ ... }這個私有方法之中
rgbframenum 初始化為0 主要用來統計(累加)讀取到的彩色frame數
之後用if判別如果 預設的thread1flag 佈林值非 false就代表成功讀取攝像頭
sw1就啟用Start()方法 【sw1 是用Stopwatch 這個類 來宣告】計算累計耗費時間
其實很好辨別哪個是變數哪個是類只要把屬標移至我們的Stopwatch上就會跳出顯示說明框
(2)gframe frame 被用在 private void ProcessFrameGray(){ ... }這個私有方法之中
grayframenum 初始化為0 主要用來統計(累加)讀取到的灰階frame數
sw2跟剛才一樣
重點來了!!!!!
gframe = new Mat(frame.Rows, frame.Cols, Emgu.CV.CvEnum.DepthType.Cv8U, 1);
gframe = new Mat (直行數 , 橫列數 , Emgu.CV.CvEnum.深度型態 , 通道數)
因為灰階所以單通道最後一個參數填1很合理!!!
Emgu.CV.CvEnum是一個命名空間
在別篇樓主部落格中Emgucv相關教學文中
http://gnehcic.azurewebsites.net/category/emgucv/
Emgu.CV.CvEnum後頭好像還可以接其他東西像是 INTER.CV_INTER_LINEAR
不過我們應該可以從這兩句語法推估
他是一個enum型態(列舉型別)
再來看CvInvoke 這個 類
public static void CvtColor(IInputArray src, IOutputArray dst, ColorConversion code, int dstCn = 0);
之後又建立了兩個Thread (線程)這個類,各自用來指向RGB和灰階的frame
一個叫做 RgbThread
被用在 button1的觸發事件 和 button3的觸發事件之中 button3 在寫關攝影頭
大概分析到此
https://msdn.microsoft.com/zh-tw/library/fd85b3df(v=vs.80).aspx
微軟官網上資訊寫著
=====================================================================
之後又發現有兩篇blog作者是寫關於libemgucv-windows-universal-cuda-2.9.0.1922-beta
Visual studio 2013 express 下 安裝 EmguCV - WebCam
http://ezworker2010.blogspot.tw/2014/03/visual-studio-2013-express-emgucv.html
C# visual studio 2012 EmuCV 安裝教學 與 Emgu.CV.CvInvoke 解決
http://vincecc.blogspot.tw/2013/11/c-visual-studio-2012-emucv.html
兩篇 作者皆使用 emgucv 2.4.9 beta
不如試試這版吧
本次分析告一段落
留言
張貼留言