64位Win7下编译Python3的计算机视觉库:OpenCV
注:本文全原创,作者: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的更多相关文章
- 64位Win7下编译hadoop 1.2.1问题解决
0.报sed的错误.原因在于没有安装cygwin.安装cygwin的时候要选择sed 1.Cannot run program "autoreconf". 这个问题在网上看了很多解 ...
- 64位Win7下运行ASP+Access网站的方法
64位Win7下运行ASP+Access网站的方法 近日系统升级为WIN7 64位之后,突然发现原本运行正常的ASP+ACCESS网站无法正常连接数据库. 网上搜索多次,终于解决了问题,总结了几条经验 ...
- 在64位linux下编译32位程序
在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783
- 64位Win7下H3C的iMC无法查看“网络拓扑”的解决方法、心路历程
64位Win7下H3C的iMC无法查看"网络拓扑"的解决方法.心路历程
- 64位Win7下用VS2010编译OpenSSL
http://blog.csdn.net/henter/article/details/8364532 首先要说明,如果不想自己编译OpenSSL,可以到 http://slproweb.com/pr ...
- 64位Win7下安装与配置PHP环境【Apache+PHP+MySQL】
[软件下载] 本安装实例所使用安装文件如图所示: 其中,64位版本的MySQL安装文件mysql-5.5.33-winx64.msi,可直接从官网下载,下载地址:http://dev.mysql.co ...
- 64位centos 下编译 hadoop 2.6.0 源码
64位os下为啥要编译hadoop就不解释了,百度一下就能知道原因,下面是步骤: 前提:编译源码所在的机器,必须能上网,否则建议不要尝试了 一. 下载必要的组件 a) 下载hadoop源码 (当前最新 ...
- 关于在64位win7下运行Virtualbox安装系统时出错(提示VBoxDD.DLL错误)的解决方
安装没有问题,安装了最新版VirtualBox-4.3.18-96516-Win,一点运行想安装系统时就出错. 这是提示的错误: 运行Virtualbox去安装系统时出错:Failed to open ...
- C# 64位win7下DllImport LoadLibrary函数失败 z
[DllImport["kernel32.dll"]] static extern IntPtr LoadLibrary(string lpFileName); public vo ...
随机推荐
- 【Android - 基础】之PopupWindow的使用
创建一个类继承自PopupWindow,编写自定义的PopupWindow类.示例代码如下: import android.app.Activity; import android.graphics. ...
- Python数据类型转换
Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 compl ...
- uva 11195 Another queen (用状态压缩解决N后问题)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Android-Unable to resolve target 'android-8'
- 《Linux内核修炼之道》 系列
http://blog.csdn.net/fudan_abc/article/category/655796
- OC协议
概念:定义了一个接口,其他类负责来实现这些接口.如果你的类实现了一个协议的方法时,则说该类遵循此协议. 非正式协议:非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(Unimplem ...
- MFC/VC++ 响应回车键的实现
在VC++中,要实现对回车键的响应实现,一般通过截获消息来响应,即通过处理BOOL PreTranslateMessage(MSG* pMsg)这个函数来处理 实现如下: BOOL PreTransl ...
- git 删除配置的远程地址
删除(origin 名称需根据你本地查询出来的想删除的名字, 查询命令为 git remote -v) git remote rm origin 添加(origin 名称可根据需要添加) git re ...
- C# 引用SHDocVw 实现模拟网页操作
因为最近项目需要,所以接触到了网页爬取. 1. HttpWebRequest 初期接触的都是一些比较简单的网页,通过Fiddler抓包分析后,就能模拟进行http请求,进行想要的操作. 2. WebB ...
- C#中隐式类型本地变量var
在新接触的项目中,看到很多声明变量时用var.只记得在javascript中声明变量用var.今天在家里看C#和.Net高级编程,看到隐式变量这一块,就总结一下C# 中隐式变量var的用法. 1.C# ...