2013-06-24 55 views
13

我得到這個錯誤爲「Emgu.CV.CvInvoke」的類型初始值引發了異常

的類型初始爲「Emgu.CV.CvInvoke」引發了異常。

當我嘗試使用Emgu CV。我嘗試了所有我能想到的方法來解決這個問題,但它仍然給出了同樣的錯誤,當我點擊一個按鈕時,它會顯示

未將對象引用設置爲對象的實例。

這是代碼我想:

void ProcessFunction(object sender, EventArgs e) 
{ 
    imgOrg = capturecam.QueryFrame(); 
    if (imgOrg == null) return; 
    imgProc = imgOrg.InRange(new Bgr(50, 50, 50), new Bgr(255, 255, 255)); 
    imgProc = imgProc.SmoothGaussian(9); 
    imageBox1.Image = imgOrg; 
    imageBox2.Image = imgProc; 
} 

什麼可能我做錯了,我怎麼能調試這進一步?謝謝!

+0

我知道這是一個老問題,但如果你的操作系統是64位,那麼你應該使用EmguCV x64 DLL,如果OS是32位,那麼EmguCV x86 dlls。如何構建解決方案並不重要,可以輕鬆構建爲「任何CPU」。 – Edgar

回答

9

它可能無法加載非託管DLL依賴關係。幾個暗示:

  1. 請確保您的.NET項目的目標是x86而不是AnyCPU,因爲您可能有x86構建的OpenCV。
  2. 確保OpenCV的dll文件是在你的路徑(或直接在bin目錄中,如果這是一個控制檯/的WinForms/WPF應用程序。)
+0

ya它在平臺目標x86 ..我已經包括opencv DLL到bin目錄調試文件夾,但它仍然給出了相同的錯誤... –

+1

當拋出異常時,你可以在調試器中斷開嗎?您可能會在該例外詳情中獲得更多信息。 – jlew

+0

即時通訊新的這個我不知道如何打破我的調試器 –

5

複製並粘貼到bin文件夾中的所有託管DLL您的EMGU安裝到您的exe文件所在的位置(項目文件夾的Release或Debug文件夾)。
在我的情況下,託管DLL是在「C:\ Emgu \ emgucv - 窗口 - 萬能 - 個CUDA 2.9.0.1922 \ BIN \ X86」

+0

在我的情況下,我做了一個乾淨的構建,並且它清除了bin文件夾中的內容。重新安裝恢復了文件。下面是什麼在那裏默認:concrt140.dll cvextern.dll msvcp140.dll opencv_ffmpeg330_64.dll vcruntime140.dll – Brian

2

你應該添加依賴的DLL到項目和變革「複製到輸出目錄opencv_core290.dll,opencv_highgui290.dll,:從Emgu \ emgucv - 窗口 - 萬能 - 個CUDA 2.9.0.1922 \ BIN \ X86

在我的項目中添加 -'屬性 '複製總是'(>現有項目補充) opencv_ffmpeg290.dll,opencv_imageproc290.dll和cudart32_55.dll

13

我有一樣的問題。我的內部異常是「無法加載DLL'opencv_core290'」。

您需要將x86和x64文件夾從「yourEmguFolder/bin」複製到項目的輸出(bin)目錄中。然後再次構建項目並運行。

根據emgu wiki

+0

夥計們,這只是幾個小時的努力後,爲我工作的方式! 謝謝穆罕默德 – Phoenician

+0

該解決方案還可以用於遠程服務器。 –

2

首先,你必須三個庫添加到項目中。 opencv_core290.dll,opencv_highgui290.dll,opencv_imgproc290.dll。在這裏,290指的是你的opencv版本。在他們的財產更改後「不要複製」到「複製總是」。比保存你的項目。之後,去下面的位置。如果你的機器是64位而不是轉到下面的文件夾「C:\ Emgu \ emgucv-windows-universal-cuda 2.9.0.1922 \ bin \ x64」,或者如果你使用的是32位操作系統而不是「C:\ Emgu \ emgucv- windows-universal-cuda 2.9.0.1922 \ bin \ x86「並複製該文件夾中的所有dll,並將其粘貼到您的項目/ bin/debug /文件夾中。比重建你的項目。比它會正常工作。

祝你好運!

0

我在我的32位機器有3天相同的問題。我解決了這個問題,只需將bin和x86文件夾中的所有dll複製到system32文件夾中即可運行。它看起來像是依賴於其他dll的dll以及轉移所有作品的時刻。我沒有時間找出哪一個。

0

對我來說,問題解決了通過點擊在Visual Studio:

菜單 - >項目 - >屬性 - >建設 - >身高32位。

它一定是emgu(可能是x86)和我的操作系統x64的問題)。

1

發現這個在C#中,VS 2017年,emgu版本3.2.0.2682

上AnyCPU試過一個簡單的構建和收到的壞格式異常。 所以我嘗試了x86壞格式異常,因爲評論中可能有建議。最後我把它作爲x64,它工作得很好。你可以使用LD_LIBRARY_PATH解決它

0

  1. 打開警告和檢查什麼的lib你的程序缺乏

  2. 找到路徑

    $定位#尋找庫路徑

  3. 在您的IDE中,將環境變量LD_LIBRARY_PATH設置爲lib路徑(我使用單聲道發展,路徑運行 - >運行帶有 - >自定義參數...)

它的工作不幹好現在:)

相關問題