近期项目需要用到OpenCV中的几个函数,但其函数无法全部实现自己需要的功能,故而需要改进部分函数,为安全及效率起见,想参考OpenCV的源码来改进,这样节省时间的同时亦可提供代码的鲁棒性和通用性。那么如何查看OpenCV的源代码?在VS2010环境下,使用“Go to Definition”显然不能满足要求(OpenCV已被编译成LIB及DLL文件供调用),简单搜索了一下,得知可CMake导出OpenCV源码生成VC++项目,进入可查看源码,下面一步一步来达到此目的。

一、下载并安装CMake

CMake 是个开源的跨平台自动化建构系统,在下载页面上可下载源码及二进制可执行程序,我们只需要下载安装包即可,我的PC系统是Windows 7(32bit),所以我下载cmake-2.8.12.1-win32-x86.zip

下载完成后,解压到/cmake-2.8.12.1-win32-x86文件夹下,进入./bin目录,双击“cmake-gui.exe”启动CMake。

二、使用CMake生成VC++项目

1.  打开CMake后,界面如下图所示

2.  填入相关信息

如上图所示,①点击“Where is the source code”后面的那个“Browse Source...”按钮,选择OpenCV源文件的安装路径;②点击“Where to build the binaries”后面的那个“Browse Build...”按钮,选择CMake生成的工程文件所在的路径;③点击“Configure”转下一步。

3.  点击“Configure”按钮,配置编译平台

如笔者的机器上安装的是VS2010,因此,就选择Visual Studio 2010。

4.  点击Finish按钮,开始配置

界面上显示出现了错误,查看错误原因得知“Could not register CMake's Visual Studio macros file 'CMakeVSMacros2.vsmacros' while Visual Studio is running. Please exit all running instances of Visual Studio before continuing.CMake needs to register Visual Studio macros when its macros file is updated or when it detects that its current macros file is no longer registered with Visual Studio.”

百度一下,原来是因为VS2010相关路径设置里面包含了中文等相关字符,可参看解决CMake为VC准备生成文件时的Could not copy from不能复制问题中的解决方案,修改路径名为全英文的。

修改好后,再次点击Configure,这次成功了,如下所示:

默认有的复选框没有选择,最好不要选择,因为库可能不全,从而导致生成失败,默认就好了。

5. 点击“Generate”按钮,进行生成。

如上所示,最下面的消息框中显示配置完成,生成也完成了。

我们转到生成目录(…/OpenCV2.4.8VS2010),如下所示:

OpenCV.sln便是我们需要的解决方案文件。至此,全部结束。

使用CMake生成VS2010项目查看OpenCV源代码的更多相关文章

  1. 使用CMake生成sln项目和VS工程遇到的问题

    用vs运行cmake后的工程 参考:http://zhidao.baidu.com/link?url=AZRxI0jGDzo6Pikk68qylee0g7leXbpbZGiVuyiijWbd8scUK ...

  2. CMake生成VS2010工程相对路径和绝对路径问题说明

    CMake生成VS2010工程相对路径和绝对路径问题说明 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 主要是使用CMake生成的VS2010的工程,最好不 ...

  3. cocos2d-2.0-x-2.0.4生成vs2010项目模板的解决方法

    cocos2d教学书籍还有网上好多博主都说仅仅要执行一下install-templates-msvc.bat这个批处理文件即可了.但是我按了半天vs2010就是不出现令小伙伴惊喜的cocos2d wi ...

  4. 利用CMake和OpenCV源代码生成Visual Studio工程

    OpenCV1.0版本有windows,linux之分,笔者曾经一直使用Opencv1.0.这个版本在下载,安装之后,在 \OpenCV\_make文件夹下面已经存在了一个opencv.dsw的工程文 ...

  5. opencv学习_15 (利用cmake查看opencv的源码)

    当我们有时想查看opencv自带的函数的源代码,比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义,我们会很惊讶的发现为什么只看到了cvCr ...

  6. 利用cmake查看opencv的源码

    当我们有时想查看opencv自带的函数的源代码,比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义,我们会很惊讶的发现为什么只看到了cvCr ...

  7. 如何查看OpenCv的源代码

    需要移植部分opencv的算法,不得不查看opencv的原始代码. 在一般的代码调试中一般只能看到一些opencv的函数声明和定义,看不到内部执行过程,需要利用 CMake导出opencv 源码,生成 ...

  8. CMake生成OpenCV解决方案&&编译OpenCV源码

    生成OpenCV工程需要用到CMake,所以第一步需要下载CMake软件,下载链接:CMake下载 目前最新的版本是3.7.1,这里选择下载Platform下的Windows win32-x86 ZI ...

  9. 学习 opencv---(6)玩转opencv源代码:生成opencv 工程解决方案与opencv 源码编译

    在这篇中,我们探讨如何通过已安装的opencv选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码.我们可以对其源代码进行再 ...

随机推荐

  1. 在64位ubuntu上安装alienbrain客户端

    一.首先从Alienbrain_EN_10.5.zip安装包(网上可搜索下载)里提取出linux版安装文件:Installations/Clients/Linux/NoVM/install.bin并c ...

  2. 在linux系统个人目录下安装新版python

    一.下载所需的python版本文件 在linux个人目录下 下载https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tar.xz 解压tar.xz ...

  3. Struts2学习第七课 ActionSupport

    com.opensymphony.xwork2.ActionSupport类是默认的Action类,如果某个Action节点没有配置class属性,则ActionSupport即为待执行的Action ...

  4. 24.command-executor

    这里先给出题目链接: https://command-executor.hackme.inndy.tw/ 这是一道不错的ctf题,首先说一下考察点: 文件包含读源码 代码分析结合CVE CVE导致的命 ...

  5. 1.如何绕过WAF(Web应用防火墙)

    一:大小写转换法: 看字面就知道是什么意思了,就是把大写的小写,小写的大写.比如: SQL:sEleCt vERsIoN(); ‍‍XSS:)</script> 出现原因:在waf里,使用 ...

  6. NVI模式

    简介: --NVI即(Non-VIrtual Interface)模式强化依赖倒置,介于 Virtual与No Virtual 之间 允许子类重新实现 也可以在父类中对子类 进行限制和其它操作. 由来 ...

  7. 【MYSQL】删除数据后自动增长列归0的问题

    在清空数据表后发现自动增长id列在新增数据后仍然会按照之前的顺序生成 强迫症,就是想清空数据后让id从0开始,于是百度 执行以下sql语句可以让自动增长列归0 truncate table 表名 这是 ...

  8. enter键触发事件的清除

    使用iframe弹窗时 父级页面 初始化的时候 给enter键绑定了事件 在子页面中 按下enter键会触发 而报错,此时在本页面的初始化的时候 将enter键绑定的方法取消 即可: $(docume ...

  9. 转:PHP性能:序——谈ab(Apache Bench)压力测试工具

    PHP性能:序——谈ab(Apache Bench)压力测试工具 ab(Apache  Bench)是啥? ab是Apache自带的一个压力测试软件,可以通过ab命令和选项对某个URL进行压力测试.a ...

  10. 通过增删改查对比Array,Map,Set,Object的使用成本和实现方式

    1.Array 和 Map 对比 { // array and map 增 查 改 删 let map = new Map(); let arr = []; // 增 map.set('a', 1); ...