图像处理算法打包成dll
本文為原創作品,轉載請注明出處
歡迎關注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
在進行一個項目時,有時為了不公開算法源碼,通常會把算法打包成一個dll文件,這樣既可以測試算法的效果,也不會泄露自己的算法成果。下面介紹一個在VS2013+Opencv2.4.9版本的環境下,打包的例子,與大家一起交流。
?
先上一張圖片,測試用
?
Ok開始正文:
打包成dll
2、新建一個DLL項目,命名opencv_dll,空項目和導出符號不選擇
完成
3、源文件中包含3個文件 dllmain.cpp opencv_dll.cpp 和stdafx.cpp,這里的dllmain.cpp類似于C中的main函數,但是我們的代碼并不是在這個dllmain函數中,它只是相當于一個入口和出口,當函數執行時先進入這個dllmain函數中,然后再執行其他函數,我們需要定義的函數是寫在opencv_dll.cpp這個文件中的,其實和生成可執行文件的程序編寫一樣。
4、在這里編寫一個函數,該函數的功能是讀取指定路徑下存放的一張圖片,并調用opencv中的函數對圖片進行顏色空間的轉換,后顯示圖片。
// opencv_dll.cpp : 定義 DLL 應用程序的導出函數。 //#include "stdafx.h" #include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include<opencv2\imgproc\imgproc.hpp>using namespace cv;__declspec(dllexport) int opencv_dll_main(string sImagePath){// 讀入一張圖片(測試圖) Mat img = imread(sImagePath),tempImage;// 創建一個名為 "處理后圖片"的窗口 cvNamedWindow("處理后圖片", 0);cvResizeWindow("處理后圖片", int(img.rows ), int(img.rows));cvNamedWindow("原始圖片", 0);cvResizeWindow("原始圖片", int(img.rows), int(img.rows));//進行顏色空間的轉換cvtColor(img, tempImage, COLOR_LBGR2Lab);// 在窗口中顯示測試圖 imshow("處理后圖片", tempImage);imshow("原始圖片", img);// 等待操作,關閉顯示 waitKey(0);return 0; }
?
5、代碼寫完后,編譯生成,會在該項目路徑下的debug文件夾中生成opencv_dll.dll和opencv_dll.lib文件,代表生成成功。
測試生成的dll文件
1、新建一個控制臺項目,【新建】—【項目】—【win32控制臺應用程序】
勾上空項目,完成
2、添加代碼文件
?
#include <stdio.h> #include<iostream> using namespace std;#pragma comment(lib, "opencv_dll.lib") //調用dll文件時候必須用到的 int opencv_dll_main(string sImagePath); //對剛才寫好的處理函數進行聲明 //主函數 int main(){string imagePath = "G:\\VS2013_project\\blog\\test_opencv_dll\\測試圖.jpg"; //圖像的處理路徑opencv_dll_main(imagePath);return 0;}寫好代碼后,調試生成,報錯
那是因為沒有把生成的dll文件拷貝到這個項目的debug路徑下,拷貝之后還要在項目屬性中進行聲明,【項目】——【屬性】——【VC++目錄】——【庫目錄】,添加
G:\VS2013_project\blog\test_opencv_dll\Debug(就是上面拷貝到的debug路徑),再次編譯生成。運行程序。
3、效果如下:
總結
以上是生活随笔為你收集整理的图像处理算法打包成dll的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多伦多大学好吗_多伦多大学好毕业吗
- 下一篇: 第一节:什么是ES6?新手该如何理解