生成OpenCV工程需要用到CMake,所以第一步需要下载CMake软件,下载链接:CMake下载

目前最新的版本是3.7.1,这里选择下载Platform下的Windows win32-x86 ZIP,大小21M:

把下载完成的压缩包解压出来就可以了,不用安装。打开解压后的路径下…\cmake-3.7.1-win32-x86\bin\cmake-gui.exe,会弹出如下CMake窗口:

接下来就可以安装步骤一步一步生成OpenCV工程了。

1.  点击右侧“Browse Source”按钮输入OpenCV源码所在路径:

2. 点击右侧“Browse  Build”输入生成的OpenCV工程存放目录:

3. 点击左下角“Configure”按钮生成工程:

点击之后弹出如下对话框,CMake会自动选择本机已经安装的目标编译器,一般情况下默认即可,单击“Finish”:

如果不幸中招了,错选了本机没有的编译器,则会生成失败。要更改默认的目标编译器,点击CMake左上角的File->Delete Cache ,就会把之前选择的清除掉再重新选择。

如果选择的编译器没错,点击“Finish”后就会执行生成:

大概需要2分钟,生成完成:

4. 第一次“Configure”生成之后,还需要第二次执行生成,再次单击“Configure”按钮,执行第二次生成:

第二次生成完成:

5. 经过两次“Configure”之后,点击“Generate”按钮生成最终的OpenCv解决方案:

出现“Generate done”表示生成完成:

经过以上5个步骤之后就可以去刚才选择的OpenCV工程存放目录下查看生成的项目,我这里是在D:\Software\MyOpenCV 下:

双击打开工程OpenCV.sln,一共有71个项目,我们用的所有的OpenCV函数都是由这个工程生成的,可以在这些项目 里找到所有OpenCV函数的原始实现,按F5编译工程:

编译成功之后会在工程目录bin->Debug下生成很多个dll动态库文件。如果没对OpenCV工程源码修改的话,这些dll文件跟OpenCV自带的dll文件是一样的,如果要对指定的OpenCV函数进行优化或者功能上的剪切,在更改源码之后编译生成dll文件,再去调用这些dll文件就行了。

编译OpenCV源码

以最常见的imshow函数为例,找到opencv_highgui项目里的window.cpp文件里的imshow函数实现,在函数开头加一句话“2017新年快乐!”,并在控制台输出(需要加头文件iostream):

之后右键opencv_highgui项目->生成,把bin->Debug文件夹下的opencv_highgui2413d.dll替换掉之前OpenCV程序中的opencv_highgui2413d.dll文件。新建一个工程,测试一下imshow函数的效果:

#include <highgui/highgui.hpp>

using namespace cv;

int main()
{
Mat image = imread("Test.jpg");
imshow("Test", image);
waitKey();
return 0;
}

执行效果,在输出图片的同时,也在控制台输出了“2017新年快乐!”,说明对OpenCV函数源码的修改起作用了:

CMake生成OpenCV解决方案&&编译OpenCV源码的更多相关文章

  1. ubuntu下cmake编译opencv 3.4.3源码;

    在进行编译前,准备工作: 1)  到opencv官网下载源码(https://opencv.org/releases.html): 2)  安装qt(http://download.qt.io/); ...

  2. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  3. ant编译solr源码生成eclipse项目,解决一直resolve,一直[ivy:retrieve]的问题

    这两天在学习solr,结果刚到编译solr源码就卡住了,足足卡了两天,网上找各种解决办法都是简单带过,说是缺少jar包,下载下来放到对应位置就好了....对应位置???咋不说这个问题用相应方法解决即可 ...

  4. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    昨晚在编译源码,make一段时间之后报错如下: # A fatal error has been detected by the Java Runtime Environment: # # SIGSE ...

  5. [Android Pro] 自己动手编译Android源码(超详细)

    cp from : https://www.jianshu.com/p/367f0886e62b 在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈andro ...

  6. Windows下编译live555源码

    Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...

  7. 自己动手编译Android源码(超详细)

    http://www.jianshu.com/p/367f0886e62b 在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事. ...

  8. windows 平台使用 VS2017 编译 libevent 源码

    一 依赖库编译 先要将其依赖的库编译好,其中openssl需要编译到libevent中,编译成libevent_openssl.lib库,zlib在新版本中只有示例用到. 1)windows 平台使用 ...

  9. windows使用VS编译python源码

    使用VS2021编译python源码 说明,使用VS2019也是可以的. 环境准备 对于VS2019首要要安装必要的环境 到python官网下载源码压缩包以及解压(红色箭头任选一个都行) 打开下载好的 ...

随机推荐

  1. 初识OpenStack(1)

    初识OpenStack(1) 首先 先来说说我与openstack的渊源吧.那是在上个月中旬.学张的一个朋友给我打电话说让一起来搞一个云平台,当时也不知道是什么.就非常高兴的答应下来了,到了周末,就过 ...

  2. ECMAScript5和ECMAScript6_浏览器支持情况

    ECMAScript5浏览器支持情况: Opera 11.60 Internet Explorer 9* Firefox 4 Safari 5.1** Chrome 13 * IE9不支持严格模式 - ...

  3. 【转载】zookeeper数据模型

    [转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图: 图片引用自developerworks 图中的每个节点称为一个 ...

  4. 23种设计模式——Prototype模式

    Prototype模式是提供自我复制的功能.包括浅拷贝和深拷贝. 一.Prototype模式的用途 场景1:游戏场景中有很多类似的敌人,它们的技能都一样,但是随着敌人出现的位置和不同,它们的能力也不太 ...

  5. Fragment的基本应用

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50933621 Fragment 还是先来基本介绍. Fragment –> 片段 ...

  6. 选择标识符(identifier)

    整数通常是标识列最好的选择,因为它们很快并且可以使用auto_increment:千万不要使用enum和set类型作为标识列:尽量避免使用字符串类型作为标识列,因为他们很消耗空间,并且通常比数字类型慢 ...

  7. Netty+WebSocket简单实现网页聊天

    基于Netty+WebSocket的网页聊天简单实现 一.pom依赖 <dependency>        <groupId>io.netty</groupId> ...

  8. (七)RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中

    原文:(七)RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中 前面第六章我们使用的是direct直连模式来进行消息投递和分发.本章将介绍如何使用fanout模式将消息推送到多 ...

  9. [TypeScript] Understand lookup types in TypeScript

    Lookup types, introduced in TypeScript 2.1, allow us to dynamically create types based on the proper ...

  10. Tricks(四十九)—— 按 batch 访问越界的解决办法

    使用 min 函数指定访问的最终位置,本质上是增加一个条件判断: done = false; batch_size = 10000; idx = 1; while ~done idx_end = mi ...