Windows下使用VS2008編譯OpenCV 2.1 添加Intel TBB和Python支持

Windows下使用VS2008編譯OpenCV2.1 添加Intel TBB和Python支持

  步驟:

  1.仔細閱讀OpenCV官網上的InstallGuide:http://opencv.willowgarage.com/wiki/InstallGuide

  2.在“2) Install Prerequisite Libraries and Tools”中提到了如果想支持Python調用需要Python 2.6或者 2.7版本,而且還需要NumPy和SciPy庫。升級Python至2.7的方法請參考“Windows下升級Python 2.5到Python 2.7”一文。NumPy和SciPy的下載地址:http://www.scipy.org/Download,安裝指導:http://www.scipy.org/Installing_SciPy/Windows。對於已經安裝好了Python的用戶來說,直接下載對應Python版本的二進制安裝包安裝即可。

  3.如果需要Intel TBB支持的話,去Intel TBB主頁下載TBB(注意選擇Windows版本的)。下載完之後解壓到某個目錄下(不需要安裝,假設路徑爲D盤根目錄),然後將頭文件路徑:D:\tbb40_233oss\include,Lib文件路徑:D:\tbb40_233oss\lib\ia32\vc9和Bin文件路徑:D:\tbb40_233oss\bin\ia32\vc9添加到系統環境變量中去。(注意自己對應的平臺和版本,64位的請選擇intel64,VS2005->VC8,VS2010->VC10)

  4.打開CMake GUI(我使用的版本是CMake2.8),Where is the source code 和 Where to build binaries填寫如下圖:

CMake配置圖


然後點擊Configure按鈕,選擇VS2008 VC9編譯器,CMake會產生一個基本的配置,不會爲你勾選上WITH_TBB,所以你要自己在中間的列表窗口咋紅找到WITH_TBB選項,然後勾選上。如果你還想要生成一些其他項目的配置文件,比如OpenCV提供的例子,那麼你也需要自己勾選上相應的選項。最後點擊Generate按鈕,就會爲你產生VS2008對應的項目文件。如果一切順利,下面文本框中的輸出如下:

General configuration for opencv 2.1.0 =====================================
Built as dynamic libs?: ON
Compiler:
C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /Zm1000 /EHsc- /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /MD /O2 /Ob2 /D NDEBUG /Zi
C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /Zm1000 /EHsc- /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
Linker flags (Release): /STACK:10000000 /machine:X86 /INCREMENTAL:NO /debug
Linker flags (Debug): /STACK:10000000 /machine:X86 /debug /INCREMENTAL:YES
Image I/O:
JPEG: build
PNG: build
TIFF: build
JPEG 2000: build
Interfaces:
Old Python: 0
Python: ON
Python interpreter: D:/Python27/python.exe
Python numpy: 1
Use IPP: NO
Use TBB: YES
Build Documentation 0
Install path: D:/OpenCV2.1
cvconfig.h is in: D:/OpenCV2.1
-----------------------------------------------------------------
Configuring done

  注意,如果以前使用過CMake編譯過OpenCV,請先點擊File菜單下的Delete Cache ,刪除緩存文件,以免配置得不到更新。我在安裝過程中就遇到了明明已經修改了Python的路徑爲2.7的路徑,但是Configure產生的結果還是指向了原有Python2.5的路徑的問題。

  5.打開VS2008,然後打開剛纔生成的OpenCV.sln解決方案文件(在Where to build binaries路徑下),分別生成Debug和Release版本。
  注意: 在生成CvPy項目的Debug版本過程中,會提示找不到Python27_d.lib導入庫。查看cvPy項目屬性的鏈接器->輸入->附加依賴項,我們會發現所填寫的導入庫爲D:\Python27\libs\python27.lib(路徑可能不同)。也就是說CMake已經知道我們所下的Python2.7安裝包中沒有提供Python27.lib的Debug版本,所以爲我們選擇了Python27.lib的Release版本(注意生成Debug版本的過程中可以鏈接第三方的Release版本庫,只是對應的庫就沒有提供調試信息了),爲什麼還會出現找不到Python27_d.lib的錯誤呢?原因在於cvPy項目的源文件cv.cpp包含了Python.h文件,而Python.h文件又包含了pyconfig.h文件,在pyconfig.h文件中有一段專門針對VS平臺的導入庫選擇代碼:

複製代碼
/* For an MSVC DLL, we can nominate the .lib files used by extensions */
#ifdef MS_COREDLL
# ifndef Py_BUILD_CORE /* not building the core - must be an ext */
# if defined(_MSC_VER)
/* So MSVC users need not specify the .lib file in
their Makefile (other compilers are generally
taken care of by distutils.)
*/
# ifdef _DEBUG
# pragma comment(lib,"python27_d.lib")
# else
# pragma comment(lib,"python27.lib")
# endif /* _DEBUG */
# endif /* _MSC_VER */
# endif /* Py_BUILD_CORE */
#endif /* MS_COREDLL */
複製代碼

所以在你生成Debug版本的過程中,鏈接器會去尋找python27_d.lib文件。
  解決的辦法:
  1)修改pyconfig.h文件,將 pragma comment(lib,"python27_d.lib")改成pragma comment(lib,"python27.lib")
  2)下載python27_d.lib和python27_d.dll文件。將python27_d.lib文件放入D:\Python27\libs\目錄下,將python27_d.dll放入C:\Windows\System32路徑下。然後修改項目屬性中的附加依賴項:D:\Python27\libs\python27.lib爲D:\Python27\libs\python27_d.lib。(建議自己編譯python的Debug庫或者使用第一種方法,因爲可能因爲平臺或者Python版本的原因,上面所提供的庫不能正常使用,出現mismatch等錯誤情況)

  6.添加生成的cv.pyd文件的路徑(D:\OpenCV2.1\lib\Release或者D:\OpenCV2.1\lib\Debug,具體看你需要使用的版本)到python的庫路徑中

  7.測試,打開CMD(命令行),在D:\OpenCV2.1\samples\python路徑下運行:python delaunay.py,你會看到如下圖所示的運行結果:)

delaunay運行結果圖

   如果你看到上面的結果圖了,恭喜你,以後你可以後用Python+OpenCV了。(注意本文中的路徑請根據自己的情況確定)

作者: pzxbc
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
發佈了23 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章