使用CMake来编译OpenCV,以匹配自己使用的VS版本。

主要有两步:

  1. CMake编译OpenCV源码得到OpenCV.sln工程文件。
  2. VS编译OpenCV.sln。

以最新的cmake-3.16.0-rc1-win64-x64、opencv-3.4.8、opencv_contrib-3.4.8为例,编译适合VS2013的x64版本。

【下载软件】解压后我都放到了D盘根目录

1、cmake-3.16.0-rc1-win64-x64.zip,解压直接可用

2、opencv-3.4.8源码文件Sources,解压即可

3、contrib库(下载opencv同版本,注意下边要点击选项卡选版本,别直接下载)

4.1、安装python(参考此链接1、2步),即便纯使用C++,也建议把python装上,深度学习必不可少。

4.2、安装numpy,打开cmd,输入 pip install numpy

【编译步骤】

1、cmake编译opencv源文件,生成OpenCV.sln。

以管理员身份运行D:\cmake-3.16.0-rc1-win64-x64cmake-gui.exe

单击一次Configure后,Search里筛选信息,带test的都不勾选,带java的都不勾选,其他参考上图红字。

留意下是否有BUILD_opencv_python3,如果没有说明此版本的opencv不支持python,如opencv4.2。

多次Configure后,打开D:\1\CMakeDownloadLog.txt,如果里边有https开头的东西,说明有文件下载失败。那么需要自己复制链接到迅雷下载。

定位CMakeDownloadLog.txt中出现copy的地方,把下载的文件放到对应的紧挨着copy的那个目录中,它会自动把文件重命名(MD5码-原名)放到相应的地方的。

如果没有出现copy,那么根据提示如D:/source/opencv-3.4.9/.cache/ippicv/1d222685246896fe089f88b8858e4b2f-ippicv_2019_win_intel64_20180723_general.zip,就把下载的ippicv文件放到它指定的目录,文件名用它指定的。

删掉D:\1\CMakeDownloadLog.txt,再次Configure,查看自动生成的CMakeDownloadLog.txt内容,没有https开头的东西,说明所有文件全部成功。单击Generate

2、VS打开OpenCV.sln,菜单栏:生成——批生成,勾选下图四个,生成,等待完成即可。

最终编译的结果在自动生成的D:\1\install文件夹中(适用于C++)。把install文件夹中include、x64文件夹拷贝到在D盘新建的文件夹opencv中,其他文件可以统统删除。

之后参考博文一次配置永久使用vs2013配置opencv2.4.13(txt中复制粘贴即可,一次配置永久使用),注意没有build目录了,找自己对应的目录即可。

【python说明】适用于python的文件cv2.cp37-win_amd64.pyd,会自动出现在你安装的python目录中D:\Python\Python37\Lib\site-packages\cv2\python-3.7。

注意会提醒——无法打开文件“python37_d.lib”,debug都会出现此问题,无关紧要,因为成功生成了release版(cmake生成目录D:\1\lib\python3\Release,若*.pyd没有出现在你的python目录中,就自己拷贝过去)。

【实战】https://blog.csdn.net/nnnnnnnnnnnny/article/details/52182091

【可能出现的问题解决方案】

问题都出现在VS编译OpenCV.sln阶段,而且都是quirc.c、quirc.h引起的。

1、如果出现下图inline相关的错误,在解决方案资源管理器中打开quirc.h,在最顶部加入如下代码后,重新第2步。

 

#if defined(WIN32) && !defined(__cplusplus)
#define inline __inline
#endif

2、出现size_t(quirc.c中)有关的错误,打开quirc.c(上图箭头下方的Source Files中能找到),把size_t改成如下unsigned long long。重新第2步。

    unsigned long long olddim = q->w * q->h;
unsigned long long newdim = w * h;
unsigned long long min = (olddim < newdim ? olddim : newdim);

CMake编译OpenCV的更多相关文章

  1. cmake编译opencv指南

    目录 cmake编译opencv指南 用包管理器安装 查看opencv相关的包 执行安装 编译安装 为什么编译安装 下载源码 编译脚本 执行编译脚本.解决3rdparty下载 编译后的设定-环境变量 ...

  2. cmake编译opencv时指定cuda版本

    之前有网友提问说,基于cmake编译时如果切换cuda版本,比如我同时装了cuda8和cuda9,opencv总是找到cuda9,我想用cuda8怎么办?实际上,手头上要配置的工程是基于opencv3 ...

  3. opencv第二课,使用cmake编译OpenCV,并添加opencv_contrib模块

    一.下载安装cmake 想要在Windows平台下生成OpenCV的解决方案,我们需要一个名为cmake的开源软件,可以在camke的官网:http://www.cmake.org/上下载到 或者点击 ...

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

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

  5. Cmake编译opencv下载不了ffmpeg时的解决办法

  6. Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake

    Ubuntu系统---编译opencv程序的几种方式g++.Makefile.Cmake 先建立一个工程(一个文件夹),写好xxx.cpp文件,可以是多个: //----------opencv.cp ...

  7. OpenCV.3.4.6_VS2015&cmake编译x86版本的bin&lib

    ZC:<<OpenCV3编程入门>> 的 2.2.2 中也有该内容的讲解 1.参考网址:opencv3.3.0+vs2015+cmake编译opencv x86 - wowo的 ...

  8. WIN7x64+VS2010+OpenCV2.4.10+cmake3.5.0重新编译OpenCV

    1,参考博文 Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV [OpenCV入门教程之七] 玩转OpenCV源代码:生成OpenCV工程解决 ...

  9. [转]VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案

    据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经常要用的算法 ...

随机推荐

  1. Oracle对象-视图和索引

    Oracle 对象-视图 视图概念 ​ 视图就是提供一个查询的窗口,所有的数据来自于原表 创建视图[必须有dba权限] --查询语句创建表 create table emp as select * f ...

  2. Django 实现登录后跳转

    说明 实现网页登录后跳转应该分为两类:即登录成功后跳转和登录失败再次登录成功后跳转.参考网上内容,基本都只实现了第一类.而没有实现第二类. 实现 为了能让登录失败后再次登录成功后还能实现跳转.我这里采 ...

  3. SQL将多行数据合并成一行【转】

    转:https://blog.csdn.net/AntherFantacy/article/details/83824182 今天同事问了一个需求,就是将多行数据合并成一行进行显示,查询了一些资料,照 ...

  4. asp.net core 中hangfire面板的配置及使用

    1.定义校验授权类DyDashboardAuthorizationFilter /// <summary> /// Hangfire仪表盘配置授权 /// </summary> ...

  5. LeetCode:180.连续出现的数字

    题目链接:https://leetcode-cn.com/problems/consecutive-numbers/ 题目 编写一个 SQL 查询,查找所有至少连续出现三次的数字. +----+--- ...

  6. 【转】SpringBoot+SpringCloud实现登录用户信息在微服务之间的传递

    实现思路: 1:准备一个ThreadLocal变量,供线程之间共享. 2:每个微服务对所有过来的Feign调用进行过滤,然后从请求头中获取User用户信息,并存在ThreadLocal变量中. 3:每 ...

  7. world 页面横向

    今天浏览world时,发现一个现象: 出现的页面比较宽,如何做的呢? 操作如下: 1.打开一个新的world 2.选择布局页签,分隔符,分节符的下一页 3.鼠标放到第二页上,选择页签布局,纸张方向,选 ...

  8. ES bulk 批量操作

    bulk允许在一个请求中进行多个操作(create.index.update.delete),也就是可以在一次请求裡做很多事情 也由于这个关系,因此bulk的请求体和其他请求的格式会有点不同 bulk ...

  9. web开发:javascript之dom与bom

    一.节点认知 二.文档结构 三.文档节点操作 四.事件target 五.BOM操作 一.节点认知 - dom与dom属性 <!DOCTYPE html> <html> < ...

  10. okhttp拦截器之RetryAndFollowUpInterceptor&BridgeInterceptor分析

    在上一次[https://www.cnblogs.com/webor2006/p/9096412.html]对okhttp的拦截器有了一个初步的认识,接下来则对具体的拦截器一个个进行了解. Retry ...