最近升上資工所,剛好需使用EmguCV函式庫來寫影像程式
第一次開始安裝還挺多問題
直到最近好不容易才解決
趁現在把安裝的步驟與錯誤的解決辦法寫下來~
其實網路上有很多方法能夠參考
但有些版本已經有點舊
以下是我反覆測試後能夠順利安裝執行的步驟
(已確定只須單獨Emgu就可執行)-----10/10修正
家中環境
OS:Windows 7 64位元旗艦版
GPU:AMD PowerColor 6870
實驗室環境
OS:Windows XP 32位元 pro
GPU:ASUS ATI 3450
兩者皆是Microsoft Visual Studio 2010 Professional
Step1:
需下載
最新的EmguCV
EmguCV-gpu x86 2.4.2.177(這是gpu版本)
和稍舊的
EmguCV x86 2.4.0.1717(這是普通版)
(gpu版本需使用nvidia的顯卡)
(本文改用2.4.0.1717)-----10/10更改
(若是使用AMD 或是intel的顯卡須下載普通版本)
(目前2.4.2.1777沒有普通版 只能下載2.4.0.1717 安裝的方式都一樣)
Step2:
把它們安裝
Emgu我把它裝到預設路徑C:/底下
(產生C:\Emgu\emgucv-windows-x86 2.4.0.1717)-----10/10更改
Step3:
設定環境變數
win7
在我的電腦右鍵->內容->進階系統設定->進階->環境變數
在使用者變數中的path對它編輯
在最後面加入
;C:\Emgu\emgucv-windows-x86 2.4.0.1717\bin\x86
(網路上有些方法沒有加上後面的x86路徑)
(但我這邊測試,沒有x86的話,會出現CvInvoke的錯誤)
直接複製貼上
Step4:
(以下步驟每次開新專案都要做一遍)
在VS2010中
開一個專案
在工具->選擇工具箱項目中
在此頁點選瀏覽
選擇C:\Emgu\emgucv-windows-x86 2.4.0.1717\bin\Emgu.CV.UI.dll
然後會跑出一個HistogramBox
在工具箱最下面跑出這四項就算新增成功了
再來加入參考
在瀏覽中視需要加入dll
(本文只加入 Emgu.CV.dll Emgu.Util.dll)
以上前置作業完成
再來
寫一個簡單的讀圖程式來測試是否成功
以下提供個簡單的範例
先拉個簡單的原件
程式碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Structure; using Emgu.Util; using System.Threading; namespace test4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string strFileName; private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "JPG 檔(*.jpg) |*.jpg;*.jpeg|" + " BMP 檔(*.bmp) |*.bmp|" + "PNG 檔(*.png) |*.png"; openFileDialog1.Title = "選擇一個圖片檔案"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { strFileName = openFileDialog1.FileName; Image<Bgr, byte> img = new Image<Bgr, byte>(strFileName); pictureBox1.Image = img.ToBitmap(); } } } }
若能成功編譯並且讀圖出現就OK了
後記:
有關於跳出Emgu.CV.CvInvoke資訊的解決方法
1.更換目標平台成x86
2.把Emgu路徑加入參考目標
3.安裝C++2010可轉散發套件等等
這些是網路上常有的解答
無奈的是
當我碰到這問題時,這些方法還是無效
所以必須先了解產生錯誤的真正原因
才能對症下藥
例如某些DLL有沒有確實載入等等
可直接執行專案裡debug資料夾的EXE執行檔
看出現甚麼錯誤
例如以上錯誤
就是opencv_core242為載入成功
很明顯就是環境變數沒設好
結果是後面路徑多了個;
這小小的錯誤就花了我好幾個小時的時間~
真是勞民傷神~
莫名其妙的是
實驗室也相同步驟設定
執行膚色偵測時竟然發生
'cvextern': 找不到指定的模組的錯誤
怪了
明明環境變數路徑正確啊
只好把cvextern.dll直接丟到debug裡面
然後就OK了~
(Emgu 我真猜不透您啊~)
希望有相同問題的網友能也夠解決這些問題
參考網頁
http://a7419.pixnet.net/blog/post/88913093-c%23-%E4%BD%BF%E7%94%A8webcam%E9%8C%84%E8%A3%BD%E5%BD%B1%E7%89%87(.avi)
http://www.emgu.com/wiki/index.php/Download_And_Installation#The_type_initializer_for_.27Emgu.CV.CvInvoke.27_threw_an_exception
http://lucas-0706.blogspot.tw/2012/02/emgu-cv-on-visual-c-2010.html
後記:
有關於跳出Emgu.CV.CvInvoke資訊的解決方法
1.更換目標平台成x86
2.把Emgu路徑加入參考目標
3.安裝C++2010可轉散發套件等等
這些是網路上常有的解答
無奈的是
當我碰到這問題時,這些方法還是無效
所以必須先了解產生錯誤的真正原因
才能對症下藥
例如某些DLL有沒有確實載入等等
可直接執行專案裡debug資料夾的EXE執行檔
看出現甚麼錯誤
例如以上錯誤
就是opencv_core242為載入成功
很明顯就是環境變數沒設好
結果是後面路徑多了個;
這小小的錯誤就花了我好幾個小時的時間~
真是勞民傷神~
莫名其妙的是
實驗室也相同步驟設定
執行膚色偵測時竟然發生
'cvextern': 找不到指定的模組的錯誤
怪了
明明環境變數路徑正確啊
只好把cvextern.dll直接丟到debug裡面
然後就OK了~
(Emgu 我真猜不透您啊~)
希望有相同問題的網友能也夠解決這些問題
參考網頁
http://a7419.pixnet.net/blog/post/88913093-c%23-%E4%BD%BF%E7%94%A8webcam%E9%8C%84%E8%A3%BD%E5%BD%B1%E7%89%87(.avi)
http://www.emgu.com/wiki/index.php/Download_And_Installation#The_type_initializer_for_.27Emgu.CV.CvInvoke.27_threw_an_exception
http://lucas-0706.blogspot.tw/2012/02/emgu-cv-on-visual-c-2010.html
您好,我也有一樣的問題
回覆刪除在本機執行都沒有問題
但是拿到別台電腦
就出現找不到找不到指定模組opencv_core242的錯誤訊息
我明明exe和dll都放在同一個資料夾了 orz
請問您有沒有idea可以解決這個問題?
有確認顯卡是哪一家的嗎???
回覆刪除我用vb.net執行時
回覆刪除會錯誤
跳出Emgu.CV.CvInvoke
但是直接去資料夾執行exe
卻沒有錯誤耶
這是什麼情況呀 = =
我也是遇到一樣的狀況...真的很奇怪啊!!
刪除功能還正常呢....真的好難懂
回覆刪除您好,
回覆刪除我在使用Emgu以及SURF的部分也有一些問題,
不知道可不可以跟您詢問一下,
這邊是我的email:sharontam0515@gmail.com
如果可以的話,請寄一封email給我。
非常感謝你。
你好
刪除我寄信摟~