生成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. UVA 11039 - Building designing 水题哇~

    水题一题,按绝对值排序后扫描一片数组(判断是否异号,我是直接相乘注意中间值越界)即可. 感觉是让我练习sort自定义比较函数的. #include<cstdio> #include< ...

  2. [Err] 1136 - Column count doesn&#39;t match value count at row 1

    1 错误描写叙述 [Err] 1136 - Column count doesn't match value count at row 1 Procedure execution failed 113 ...

  3. IPv4与IPv6数据报格式详解

    摘要: 本文给出IPv4与IPv6数据报格式示意图,并整理了各个字段含义,最后对比IPv4与IPv6数据报格式的区别. 一.IPv4数据报 图1 IPv4数据报格式版本号(version) 不同的IP ...

  4. 一个例子讲解wav头文件 stm32声音程序 录音和播放 wav

    下面我们一wav头文件来分析一下: 下面是双声道的,16位,48000采样录的wav文件: 打开属性,能看到的有用信息只有比特率了: 上图的比特率就是 wav头文件里的bitrate: 1536kbp ...

  5. 快速杀死占用8080端口进程的批处理(kill-8080.bat)

    @echo off setlocal enabledelayedexpansion for /f "delims= tokens=1" %%i in ('netstat -aon ...

  6. [GraphQL] Deploy a GraphQL dev playground with graphql-up

    In this lesson we'll use a simple GraphQL IDL schema to deploy and explore a fully functional GraphQ ...

  7. C# 使用 RabbitMQ

    1. RabbitMQ MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接 ...

  8. 在Excel中粘贴时怎样跳过隐藏行

    http://www.excel123.cn/Article/exceljichu/201203/932.html 有时在筛选后需要将其他区域中的连续行数据复制粘贴到筛选区域,以替换筛选后的数据.由于 ...

  9. SpringCloud微服务框架搭建

    一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...

  10. Android中的动画详解系列【2】——飞舞的蝴蝶

    这一篇来使用逐帧动画和补间动画来实现一个小例子,首先我们来看看Android中的补间动画. Android中使用Animation代表抽象的动画类,该类包括下面几个子类: AlphaAnimation ...