Python: 64位Win7下编译Python3的计算机视觉库:OpenCV
May 28, 2015
注:本文全原创,作者:ZMAN ( http://www.cnblogs.com/zmanone/)
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)
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的路径是不是正确。
⑤ 不要勾选 “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,就成功啦!
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~跳出来一张这样的考拉图片就说明成功啦!!
0 Comments