注:本文全原創,作者:Noah Zhang (http://www.cnblogs.com/noahzn/)
OpenCV目前最新版是3.0.0 rc1,官方給出了編譯好的Python2可以直接使用的cv2.pyd,可我想在Python3下用啊!只能硬着頭皮自己編譯了,Mingw編譯到最后一步失敗了,最終使用visual studio 2012編譯成功,過程分享如下:
(注①:本步驟適用於WIN7 64位操作系統,Python版本為3.4.3 64bit,OpenCV版本為 3.0.0 rc1,我的CUDA版本是5.5)
(注②:請確保安裝了numpy!!)
1. 安裝Visual Studio 2012。 (鏈接: http://pan.baidu.com/s/1nt65Oet 密碼: asiu 序列號:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC)
# 2015.05.28更新:
# 安裝完VS2012,請把 "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE"
和 "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools" 加入環境變量中。
# 不然可能會提示:找不到 "mspdb110.dll"。
2. 安裝CMake。(鏈接: http://pan.baidu.com/s/1c0EVLfE 密碼: mxqf)
3. 下載opencv源碼。解壓到任意位置,比如我的是 "D:/opencvcode" (鏈接: http://pan.baidu.com/s/1gdvSHuN 密碼: fabq)
(可選)下載opencv的擴展modules包。解壓到任意位置,比如我的是 "D:/opencv_contrib-master" (鏈接: http://pan.baidu.com/s/1c0tqZ9A 密碼: ee71)
4. 修改代碼。
① 打開 "D:\opencvcode\sources\modules\python\src2\hdr_parser.py"。
第4行,把 codecs 庫也import進來;第737行改為 "f = codecs.open(hname, "r", "utf-8")"。
② 打開 "D:\opencvcode\sources\cmake\OpenCVCompilerOptions.cmake"。
把第67行 "add_extra_compiler_option(-Werror=non-virtual-dtor)"注釋掉(最前面加個注釋符:#)。
③ 打開 "D:\opencvcode\sources\modules\python\common.cmake"。
在第27行"# header blacklist"下增加一行:ocv_list_filterout(opencv_hdrs "detection_based_tracker")。
5. 編譯源代碼。
① 打開CMake(gui), "where is the source code"定位到 "D:/opencvcode/sources" 目錄,"where to build the binaries"定位到任意輸出文件夾,比如我的是 "D:/opencv1"。
② 勾選"Grouped"和"Advanced"。
③ 點擊"Configure",確定,編譯器選擇"Visual Studio 2012 Win64"。
④ 確保 勾選了"BUILD -> BUILD_opencv_python3",不要勾選 "WITH -> WITH_IPP",請檢查 "PYTHON3"下各種PATH、DIR、LIBRARY的路徑是不是正確。
# 2015.12.27更新:
# 有網友不清楚路徑填啥,如果是裝的Win-Python,手動把路徑改為如下圖所示就行了。(裝的官方Python就不用改了,會自動定位的)
⑤ 不要勾選 "BUILD_opencv_line_descriptor" 和 "saliency"。(暫時不清楚這兩個庫干嘛用的,但是我勾選了line_descriptor后總是無法成功編譯)
⑥ "OPENCV -> OPENCV_EXTRA_MODULES_PATH" 定位到 "D:/opencv_contrib-master/modules"。
⑦ 再次點擊"Configure",確保沒有紅色背景色的選項后,點擊 "Generate"。
6. BUILD代碼。
① 進入 "D:/opencv1",打開 "OpenCV.sln"。
② 切換到 "Release"模式后,右鍵 “解決方案'OpenCV'”選擇“重新生成解決方案”,接下來是漫長的等待,如果最后顯示失敗個數是0,就成功啦!
# 2015.05.28更新:
# 如果提示類似這樣的error:Microsoft Visual Studio configuration file 'vcvars64.bat' could not be found
# 請在 "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64"下建立 "vcvars64.bat"這個文件
# 文件內容為:CALL setenv /x64
7. 設置環境變量。
① 把 "D:/opencv1/bin/Release"目錄加入環境變量,把 "D:/opencv1/lib/Release/cv2.pyd"復制到你的Python目錄內的 "site-packages"文件夾下。
8. 品嘗成功的喜悅。
① 在Python中,運行如下代碼:
import cv2 import numpy # 讀入圖像 im = cv2.imread('C:/Users/Public/Pictures/Sample Pictures/Koala.jpg') # 下采樣 im_lowres = cv2.pyrDown(im) # 轉化為灰度圖像 gray = cv2.cvtColor(im_lowres, cv2.COLOR_RGB2GRAY) # 檢測特征點 s = cv2.xfeatures2d.SURF_create() #s = cv2.SURF() mask = numpy.uint8(numpy.ones(gray.shape)) keypoints = s.detect(gray, mask) # 顯示圖像及特征點 vis = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) for k in keypoints[::10]: cv2.circle(vis, (int(k.pt[0]), int(k.pt[1])), 2, (0, 255, 0), -1) cv2.circle(vis, (int(k.pt[0]), int(k.pt[1])), int(k.size), (0, 255, 0), 2) cv2.imshow('local descriptors', vis) cv2.waitKey() cv2.imwrite('C:/Users/Public/Pictures/Sample Pictures/Koala2.jpg',vis)
② duang~跳出來一張這樣的考拉圖片就說明成功啦!!