C++/CLI這時就有其優勢可同時使用managed與unmanaged寫法,首先先到OpenCV官方下載最新版的OpenCV Lib 以及Intel TBB
解壓縮OpenCV-2.4.3.exe後將會產生一個opencv資料夾,裡面將會使用到
- opencv\build\include
- opencv\build\x86\vc10\lib
- opencv\build\x86\vc10\bin
解壓縮tbb41_20130116oss_win.zip後將會產生一個tbb41_20130116oss資料夾,裡面將會使用到
- C:\Users\Henry\Desktop\tbb41_20130116oss\lib\ia32\vc11\tbb_debug.lib
- ※vc11 for Visual Studio2012 根據自己IDE版本選擇
開啟一個新的CLR主控台專案,並把opencv資料夾內的include與lib資料夾複製到專案資料夾內(同cpp與h檔同位置)。
再把tbb41_20130116oss內的tbb_debug.lib放置專案內剛複製的lib資料夾。
在Include目錄及程式庫目錄增加上面路徑之目錄
在程式內載入兩個.H檔
#include "include\opencv\cv.h"
#include "include\opencv\highgui.h"
在連結器部分其他相依性加入
opencv_calib3d243.lib
opencv_contrib243.lib
opencv_core243.lib
opencv_features2d243.lib
opencv_imgproc243.lib
opencv_flann243.lib
opencv_highgui243.lib
opencv_objdetect243.lib
tbb_debug.lib
程式部分輸入
#include "stdafx.h"
#include "include\opencv\cv.h"
#include "include\opencv\highgui.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
IplImage *Image = cvLoadImage("img_1357809933.jpg");
cvNamedWindow("Show Image",CV_WINDOW_AUTOSIZE);
cvShowImage("Show Image",Image);
cvWaitKey(0);
cvReleaseImage(&Image);
cvDestroyWindow("Show Image");
return 0;
}
並把opencv\build\x86\vc10\bin內所有DLL檔案複製到Debug或是Release資料夾內
也把檔名"img_1357809933.jpg"的圖片放置專案資料夾內
- 如果是從Visual Studio直接編譯執行圖片請放置專案名稱資料夾(同cpp與h檔同位置)
- 如果從編譯完的執行檔執行請放到與執行檔同資料夾
執行結果如下
(照片為網路轉載)
您好:
回覆刪除冒昧打擾。
剛好也在嘗試在 dot net framework下掛opencv,
依據您說明的方法實驗,差別只在於opencv版本,我使用的是242,
想請問您是否有遇過這樣的錯誤訊息?
1. error C3862: 'cvRound': 不能以 /clr:pure 或 /clr:safe 編譯 Unmanaged 函式
2. error C3645: 'cvRound' : __clrcall 不可使用於編譯為機器碼的函式上
謝謝您blog上提供的詳細說明。
您好:
回覆刪除已找到答案 Orz
http://msdn.microsoft.com/zh-tw/library/ms235211(v=vs.90).aspx
看來真的需要好好搞清楚架構,不能一直亂寫.....
再次感謝您~ :)
您好
回覆刪除感謝你的熱心分享^^
我也只是把之前遇到的問題發表在這部落格
由於工作忙碌已很久沒更新 如果有我懂得我也會盡量解答