在安裝篇,我們介紹了如何安裝EmguCV到你的Visual Studio上,但是有時候當你一切都準備就緒,要開始執行範例程式時,你可能會遇到編譯器跳出CvInoke的型別初始化設定發生例外 (CvInvoke TypeInitialization Exception) 的問題,但是又不知道如何去修改他
本篇的文章除了希望介紹給遇到CvInoke 例外問提的朋友們一個快速地排除方法之外,也是我們一個筆記,自從知道這問題後,即便再次遇到也可以快速排除
前言
在安裝篇,我們介紹了如何安裝EmguCV到你的Visual Studio上,但是有時候當你一切都準備就緒,要開始執行範例程式時,你可能會遇到編譯器跳出CvInoke的型別初始化設定發生例外 (CvInvoke TypeInitialization Exception) 的問題,但是又不知道如何去修改他
本篇的文章除了希望介紹給遇到CvInoke 例外問提的朋友們一個快速地排除方法之外,也是我們一個筆記,自從知道這問題後,即便再次遇到也可以快速排除
CvInvoke 型別初始化設定發生例外 (TypeInitialization Exception )
其實這個例外會出現的原因基本上只有兩大個而已,就是「發布平台與安裝的EmguCV開發版本平台是否一致」 與 「CvInvoke類庫有無參考到openCV動態函式庫」
每次遇到這個問題也都是這兩個原因之一
以下是CvInvoke 型別初始化設定發生例外圖示:
原因一:發布平台與安裝的EmguCV開發版本平台是否一致
如果因為電腦平台是x64架構而下載的是x64版本的EmguCV,或是 打算開發x64架構,請記得在debug或是release把平台也改成x64,不同的版本,會出現此例外問題
原因二:CvInvoke類庫有無參考到openCV動態函式庫
CvInvoke裡面提供了很多影像處理的基本方法,並且他們全部都是接自openCV的DLL函式庫,如下圖擷取自EmguCV官網
並且,如果你親自去看的話也會發現其實裡面也呼叫openCV的函式庫方法來做處理;通常有可能是因為沒有把這些參考路徑加入到專案中,所以讓專案在執行時找不到(此問題和原因一無關聯,即便你是下載x86版本,如果沒有注意到這部分也會發生例外)
所以要確認是否在安裝EmguCV時,有把OpenCV的DLL加入參考路徑(例如x86版本會在在EmguCV的\bin\x86底下有)
基本上這部分如果以照著安裝篇來做就不會發生,因為參考路徑已經提到如何加入。
但是通常為了直接測試,建議可以直接在專案中加入openCV的DLL檔案,把\bin\x86中的dll加入到專案中,並選擇屬性永遠輸出,
1. 專案右鍵->加入現有項目->加入\bin\x86下的opencv dll(2.4.0為例可加入opencv_core240.dll與opencv_imgproc240.dll,其餘的依需求加入)
2.加入後對DLL右鍵->屬性->複製到輸出目錄改成永遠輸出
然後編譯執行,他就會把檔案複製到輸出目錄直接從那邊找到參考路徑,也就不會有例外發生
結論
以上就是本人通常遇到此問題的快速排除方法,希望遇到的人也可以透過這篇排除問題而有幫助到
參考資料
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝