注:本文全原创,作者: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~跳出来一张这样的考拉图片就说明成功啦!!

64位Win7下编译Python3的计算机视觉库:OpenCV的更多相关文章

  1. 64位Win7下编译hadoop 1.2.1问题解决

    0.报sed的错误.原因在于没有安装cygwin.安装cygwin的时候要选择sed 1.Cannot run program "autoreconf". 这个问题在网上看了很多解 ...

  2. 64位Win7下运行ASP+Access网站的方法

    64位Win7下运行ASP+Access网站的方法 近日系统升级为WIN7 64位之后,突然发现原本运行正常的ASP+ACCESS网站无法正常连接数据库. 网上搜索多次,终于解决了问题,总结了几条经验 ...

  3. 在64位linux下编译32位程序

    在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783

  4. 64位Win7下H3C的iMC无法查看“网络拓扑”的解决方法、心路历程

    64位Win7下H3C的iMC无法查看"网络拓扑"的解决方法.心路历程

  5. 64位Win7下用VS2010编译OpenSSL

    http://blog.csdn.net/henter/article/details/8364532 首先要说明,如果不想自己编译OpenSSL,可以到 http://slproweb.com/pr ...

  6. 64位Win7下安装与配置PHP环境【Apache+PHP+MySQL】

    [软件下载] 本安装实例所使用安装文件如图所示: 其中,64位版本的MySQL安装文件mysql-5.5.33-winx64.msi,可直接从官网下载,下载地址:http://dev.mysql.co ...

  7. 64位centos 下编译 hadoop 2.6.0 源码

    64位os下为啥要编译hadoop就不解释了,百度一下就能知道原因,下面是步骤: 前提:编译源码所在的机器,必须能上网,否则建议不要尝试了 一. 下载必要的组件 a) 下载hadoop源码 (当前最新 ...

  8. 关于在64位win7下运行Virtualbox安装系统时出错(提示VBoxDD.DLL错误)的解决方

    安装没有问题,安装了最新版VirtualBox-4.3.18-96516-Win,一点运行想安装系统时就出错. 这是提示的错误: 运行Virtualbox去安装系统时出错:Failed to open ...

  9. C# 64位win7下DllImport LoadLibrary函数失败 z

    [DllImport["kernel32.dll"]] static extern IntPtr LoadLibrary(string lpFileName); public vo ...

随机推荐

  1. 【Android - 基础】之PopupWindow的使用

    创建一个类继承自PopupWindow,编写自定义的PopupWindow类.示例代码如下: import android.app.Activity; import android.graphics. ...

  2. Python数据类型转换

    Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 compl ...

  3. uva 11195 Another queen (用状态压缩解决N后问题)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. Android-Unable to resolve target 'android-8'

  5. 《Linux内核修炼之道》 系列

    http://blog.csdn.net/fudan_abc/article/category/655796

  6. OC协议

    概念:定义了一个接口,其他类负责来实现这些接口.如果你的类实现了一个协议的方法时,则说该类遵循此协议. 非正式协议:非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(Unimplem ...

  7. MFC/VC++ 响应回车键的实现

    在VC++中,要实现对回车键的响应实现,一般通过截获消息来响应,即通过处理BOOL PreTranslateMessage(MSG* pMsg)这个函数来处理 实现如下: BOOL PreTransl ...

  8. git 删除配置的远程地址

    删除(origin 名称需根据你本地查询出来的想删除的名字, 查询命令为 git remote -v) git remote rm origin 添加(origin 名称可根据需要添加) git re ...

  9. C# 引用SHDocVw 实现模拟网页操作

    因为最近项目需要,所以接触到了网页爬取. 1. HttpWebRequest 初期接触的都是一些比较简单的网页,通过Fiddler抓包分析后,就能模拟进行http请求,进行想要的操作. 2. WebB ...

  10. C#中隐式类型本地变量var

    在新接触的项目中,看到很多声明变量时用var.只记得在javascript中声明变量用var.今天在家里看C#和.Net高级编程,看到隐式变量这一块,就总结一下C# 中隐式变量var的用法. 1.C# ...