如何通過C#調用OpenCV函數(自制OpenCV的c++ dll文件)


寫在前面:學習CUDA過程中看到了可以用OpenCV寫一個類,然后直接調用的方法,感覺很有意思(基礎太差,可能這是個很基礎的問題)。於是就想在 C# 中調用OpenCV的方法,發現有點麻煩,需要生成 .dll(動態鏈接庫)文件,生成過程中出了些小問題,所以把這個過程記錄下來,以備以后查看。

首先,你的電腦上需要安裝OpenCV,具體安裝過程百度即可,並不難(具體可以參見我轉載的另一篇OpenCV配置的文章)。下面開始進入正題,以VS2017為例。

1.  新建 空項目=>確定(注意,項目名稱與下面的文件名最好都一致,否則會出現無法生成錯誤)

2. 打開屬性管理器窗口,添加一下OpenCV配置文件,具體參見另一篇OpenCV簡單配置。

                                                      

3. 在解決方案頭文件文件夾下=>新建項=>頭文件(.h)

4.在新建的頭文件中,輸入以下內容=>extern "C" __declspec(dllexport) void loadImage(); 后面是你要調用的方法,由於我了解不深,這里只給出簡單的用法。

5.在源文件文件夾下=>新建項=>C++文件(.cpp)

6. 新建的C++文件中寫上你要添加的方法,這里以加載圖片的方法為例:

       

把程序代碼也附上:(如果出現紅色波浪線是因為沒有添加OpenCV配置文件,加上即可)

#include <iostream>
#include <opencv/highgui.h>
#include <time.h>
#include"OpenCVTest.h"  //這里對應你新建的那個頭文件

using namespace std;
using namespace cv;

void loadImage()
{
Mat image = imread("3.jpg", CV_LOAD_IMAGE_COLOR);
imshow("3.jpg Window", image);
waitKey(0);
}

7.源文件文件夾下=>新建項=>模塊定義文件(.def)

8.模塊定義文件里內容如下:

                          

附上代碼:

LIBRARY OpenCVTest 
  EXPORTS loadImage 

EXPORTS后面的就是你要調用的方法名,生成.dll文件的同時也會生成.lib庫

9.重新生成整個解決方案,可能會出現以下錯誤:

你可能會奇怪,名字明明是一樣的,為什么說不同呢?這是因為輸出文件拓展名的問題,解決方法如下:

1)在工程上右鍵=>屬性=>配置屬性=>常規

                                  

大家可以看到,文件拓展名是 .exe 改為 .dll =>確定,重新生成即可。

10.找到解決方案所在目錄,在Debug目錄下即可找到生成的 .dll 文件。要注意的是,要到整個解決方案的目錄下找Debug文件夾,如下圖;

11.新建一個C#項目(在該項目下或者新建項目皆可),為了方便,我們先創建一個控制台程序即可,創建過程不再贅述。把OpenCVTest.dll問價復制到該工程的Debug目錄下,把與dll文件中寫死的圖片名對應的圖片也放到該目錄下。

 

12.在C#文件中引用該 .dll 文件,代碼如下:

  [DllImport("OpenCVTest.dll")]     //你生成的.dll 文件名
        private extern static void loadImage();

 

13.在C#文件中直接使用該方法即可

                     

 大公告成:

 

寫在后面:總算寫完了,寫博客過程中我是重新做了一遍,但是中間出現了些錯誤,就順帶把解決方法也寫上了,大家發現有什么不對或者錯誤的地方請一定給我指出,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM