VS编译OpenCV3

2023-11-06

目录

 

流程

源码

环境

编译完成库

流程文档转载(防丢)

1.下载Cmake

2.下载OpenCV源码

3.编译OpenCV

4.最后一步-VS编译openCV

4.1编译Debug版的openCV

4.2编译Release版的openCV

4.3生成结果

5.牛刀小试


流程

Windows下 Cmake + VS 编译 OpenCV (+ opencv_contribute)源码

源码

版本:3.4.13

链接:https://sourceforge.net/projects/opencvlibrary/files/3.4.13/opencv-3.4.13-vc14_vc15.exe/download

环境

Visual Studio 2017,CMake 3.19

编译完成库

链接:https://pan.baidu.com/s/1ETvzYVtv0zGMEH7I7NXXNA 
提取码:4m3k 

流程文档转载(防丢)

windows下Cmake+VS编译OpenCV源码

这里我使用的是VS2015 update3,默认大家电脑里都有VS了。

1.下载Cmake

点击Cmake官网的下载界面,点击下载对应版本的Cmake就可以了。
在这里插入图片描述

下载完压缩包直接解压,无需安装。
点击开文件夹可以看见:

在这里插入图片描述

最后一步就是把Cmake路径下的bin文件夹路径加入到电脑的环境变量。

2.下载OpenCV源码

OpenCV在图像领域所占的地位就不用多提了,很强的工具,不过涉及到配置的问题,对于初学者来说还是会有一些问题的。

首先进入OpenCV的官网的下载界面,这里主要以OpenCV3的3.1版本为例,其他的版本一样的操作流程。
正常Windows下直接下载Win pack,下载exe文件,然后直接双击解压就可以了。
不过有些时候我们在用C++调用OpenCV时会碰到某些库文件没有的情况,所以一般还是自己下载源码,根据自己的需求生成依赖库会好一些。这里我们就选择 Sources 选项,下载就行了。

在这里插入图片描述

解压到相应路径后,可以看见下面的文件内容:

在这里插入图片描述

3.编译OpenCV

上面第一步将Cmake的bin文件夹加入到环境变量生效以后,直接在cmd里面输入cmake-gui然后回车就可以直接打开cmake了。(这里我使用的是Cmder,界面会比windows自带的cmd界面友好一些,而且可以加入右键菜单直接打开,类似于Ubuntu的Terminal,很方便,推荐大家使用,具体安装方法参见我的另一篇博客-Cmder 加入右键菜单):

在这里插入图片描述

如上图步骤:

1)首先选择source code的路径,就是上面的opencv-3.1.0/opencv-3.1.0

2)手动在opencv-3.1.0里面建一个名字为 build 的文件夹,把 build 文件夹的路径加到这步

3)点击 Configue

4)就会弹出一个选择编译器的界面,选择自己对应的VS版本就行了。

5)点击Finish

文件就开始编译了,第一次编译的话会下载一些依赖的东西,所以需要多等一会。会有如下生成:

Selecting Windows SDK version  to target Windows 10.0.16299.
The CXX compiler identification is MSVC 19.0.24215.1
The C compiler identification is MSVC 19.0.24215.1
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done

......
......  此处省略
......


  Python 3:
Interpreter: C:/Users/Chris_zhang/Anaconda3/python.exe (ver 3.5.2)
Libraries:   C:/Users/Chris_zhang/Anaconda3/libs/python35.lib (ver 3.5.2)
numpy:   C:/Users/Chris_zhang/Anaconda3/lib/site-packages/numpy/core/include (ver 1.14.0)
packages path:   C:/Users/Chris_zhang/Anaconda3/Lib/site-packages

  Python (for build):C:/Users/Chris_zhang/Anaconda3/python.exe

  Java:
ant: NO
JNI: NO
Java wrappers:   NO
Java tests:  NO

  Matlab:Matlab not found or implicitly disabled

  Documentation:
Doxygen: NO
PlantUML:NO

  Tests and samples:
Tests:   YES
Performance tests:   YES
C/C++ Examples:  NO

  Install path:  F:/Software_download/opencv-3.1.0/opencv-3.1.0/build/install

  cvconfig.h is in:  F:/Software_download/opencv-3.1.0/opencv-3.1.0/build
-----------------------------------------------------------------

Configuring done

然后就会得到下面的界面:

在这里插入图片描述

这里根据自己的需求勾选自己需要的选项或者消去自己不需要的选项就可以了,选择完成后点击 Configure 旁边的 Generate ,这个过程很快,最后会得到:

在这里插入图片描述

---------------------------------------------------------------分割线----------------------------------------------------------------------------------
##(17.07.04更1)编译 opencv_3xxworld.lib
openCV 3 版本最方便的一个地方就是将很多的库都集成到了一个 opencv_xxxworld.lib 中, 当我们点击 Configure 以后需要找到 BUILD_opencv_world 这一个选项,并且勾选它,否则,不勾选直接编译点击 Generate 的话还是会生成很多独立的依赖库,在调用添加时不是很方便。
这里写图片描述

##(17.07.04更2)加入opencv_contrib编译(如果不需要加入,可直接跳过此步)
当我们需要使用一些第三方的算法,例如kcf跟踪算法等,在OpenCV 3版本以后就多了一个叫 Opencv_contrib 的包,里面相当于是对 openCV 的一个补充,集合了很多优秀的算法,我们如果需要的话就在第三步:

假设我们下载完成后会的到一个名字是 opencv_contrib-master 的文件夹,下面就是把这个文件夹的路径加入 cmake 过程中:

这里写图片描述

如上图所示,在 Configure 以后,找到 OPENCV_EXTRA_MODULES_PATH 然后将你的opencv_contrib-master 文件夹下的 modules 加入路径当中。
然后再点击 Generate 就配置成功了。

---------------------------------------------------------------分割线---------------------------------------------------------------------------------

4.最后一步-VS编译openCV

这个时候我们再打开 build 文件夹就可以看到生成了很多的文件,选中其中的 OpenCV.sln,用 VS 打开这个工程文件:

在这里插入图片描述

4.1编译Debug版的openCV

OpenCV.sln 打开以后是这样:

在这里插入图片描述

1)首先选择 Debug x64 的平台

2)选择右边的 ALL_BUILD ,右键,选择 生成 或者 重新生成 然后静静等待就可以了

3)最后会全部成功生成

4.2编译Release版的openCV

步骤同上,只是将 Debug 变成 Release,然后右键生成 ALL_BUILD:

在这里插入图片描述

4.3生成结果

可以看到build文件夹下的lib里面就会有两个子文件夹:
在这里插入图片描述

以 Debug 为例,里面包含了下面这些文件:
在这里插入图片描述

而直接下载win pack解压出来的openCV(3.3.0)版本只有build只有下面这些文件:

在这里插入图片描述

直接解压的版本就没有 opencv_ts310d.lib 和 opencv_ts310.lib这个依赖库,如果后续用到的话就会很麻烦,所以刚开始安装,还是直接源码编译,虽然麻烦一点,不过会更方便后续的使用。

5.牛刀小试

下面是一段边缘检测的测试代码:(读者复现时,需要修改的地方我已经在下面代码中注明了)

#include "opencv2/core/utility.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"

#include <stdio.h>

using namespace cv;
using namespace std;

int edgeThresh = 1;
Mat image, gray, edge, cedge;

// define a trackbar callback
static void onTrackbar(int, void*)
{
    blur(gray, edge, Size(3,3));
    
    // Run the edge detector on grayscale
    Canny(edge, edge, edgeThresh, edgeThresh*3, 3);
    cedge = Scalar::all(0);
    
    image.copyTo(cedge, edge);
    imshow("Edge map", cedge);
}

static void help()
{
	printf("\nThis sample demonstrates Canny edge detection\n"
  			 "Call:\n"
   	"   /.edge [image_name -- Default is ../data/fruits.jpg]\n\n");
}

const char* keys =
{
	"{help h||}{@image |../data/fruits.jpg|input image name}"
	
};

int main( int argc, const char** argv )
{
    CommandLineParser parser(argc, argv, keys);
    if (parser.has("help"))
    {
	    help();
	    return 0;
    }
		//!!!!这里将 filename 换成你自己图片的绝对路径就可以了,只要修改这一处!!!!
    	string filename = "F:\\Software_download\\opencv-3.1.0\\opencv-3.1.0\\samples\\data\\fruits.jpg";
  
    
    image = imread(filename, 1);
    if(image.empty())
    {
	    printf("Cannot read image file: %s\n", filename.c_str());
	    help();
	    return -1;
    }
    cedge.create(image.size(), image.type());
    cvtColor(image, gray, COLOR_BGR2GRAY);
    
    // Create a window
    namedWindow("Edge map", 1);
    
    // create a toolbar
    createTrackbar("Canny threshold", "Edge map", &edgeThresh, 100, onTrackbar);
    
    // Show the image
    onTrackbar(0, 0);
    
    // Wait for a key stroke; the same function arranges events processing
    waitKey(0);
    	system("pause");
    return 0;
}

相应的openCV路径包括依赖库添加到工程目录中,运行上面的代码可以得到:

原图:

在这里插入图片描述

处理后的图片:

在这里插入图片描述

###程序可以正常运行,至此 OpenCV 就配置完毕了!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS编译OpenCV3 的相关文章

随机推荐

  • Jvm类加载机制详解---类加载器及双亲委托模型

    前面介绍了类加载的几个过程 实际中这些过程大部分都是由虚拟机本身去执行的 我们没有办法去改变或影响这些过程的执行 但是虚拟机团队将类加载阶段第一步中的 通过一个类的全限定名来获取描述该类的二进制字节流 这个动作放到虚拟机外部去实现 以便让应
  • 使用R语言绘制ovarian数据集中病例年龄分布的直方图

    使用R语言绘制ovarian数据集中病例年龄分布的直方图 直方图是一种常用的数据可视化工具 用于展示连续变量的分布情况 在R语言中 我们可以使用hist 函数轻松地创建直方图 本文将展示如何使用R语言绘制ovarian数据集中病例年龄的分布
  • String、StringBuffer和StringBuilder三者之间的区别

    最基本的区别就是String是一个字符串常量 长度不可改变 StringBuffer和StringBuilder是字符串变量 他们两个的长度可以改变 但StringBuffer是线程安全的 而StringBuilder是非线程安全的 Str
  • ** LeetCode 刷题 459

    这是一道我没做出来的简单题 5555 学习 方法1 移动匹配 如果一个字符串可以由一个字串重复获得 那么将两个相同字符串并起来 一定可以在中间再找到该字符串 class Solution public bool repeatedSubstr
  • JavaEE-过滤器和监听器 案例分析

    目录 过滤器和监听器 什么是过滤器 过滤器编程接口 接口Filter的主要方法 设计过滤器 实例1 编写一个过滤器审计用户对资源的访问 什么是监听器 监听器编程接口 设计监听器 实例 编写一个HttpSession事件监听器用来记录当前在线
  • Python pandas读取Excel 数据写入到数据库

    需求得到天眼查的法人信息数据导入到数据库中 经过多次不断试错最后使用Python导入 先上代码 import pandas as pd import sqlalchemy as sqla import os 读取Excel数据 def ge
  • net::ERR_HTTP2_PROTOCOL_ERROR 200错误

    场景 web端的环境上某一个请求报这个问题了 其他的请求正常 打开f12控制台看到异常net ERR HTTP2 PROTOCOL ERROR 200错误 排查 查看nginx的error log 报是某一个临时文件的权限不足 原因是启动n
  • CSVDE导出AD域下指定子OU的Group中所有成员的信息

    CSVDE导出AD域下指定子OU的Group中所有成员的信息 最近搞CSVDE搞的头疼 网上各种乱七八糟的资料 都是东搞一下西搞一下 好不容易找到一篇系统性的介绍使用CSVDE来对AD进行导入导出操作的文章 具体链接 http www co
  • mybatis(六) 处理枚举类型

    处理枚举类型 若想映射枚举类型 Enum 则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用 比如说我们想存储取近似值时用到的舍入模式 默认情况下 MyBatis 会利用 EnumT
  • python数据清洗的三个常用的处理方式!

    关于python数据处理过程中三个主要的数据清洗说明 分别是缺失值 空格 重复值的数据清洗 这里还是使用pandas来获取excel或者csv的数据源来进行数据处理 若是没有pandas的非标准库需要使用pip的方式安装一下 pip ins
  • 华为OD机试真题-分班-2023年OD统一考试(B卷)

    题目描述 幼儿园两个班的小朋友在排队时混在了一起 每位小朋友都知道自己是否与前面一位小朋友是否同班 请你帮忙把同班的小朋友找出来 小朋友的编号为整数 与前一位小朋友同班用Y表示 不同班用N表示 输入描述 输入为空格分开的小朋友编号和是否同班
  • 深度网络架构的设计技巧<一>:Can CNNs Be More Robust Than Transformers?

    导读 启发于Transformer结构 作者将三种设计引入到CNN中 加强后的CNN取得比ViT更强的鲁棒性 这三种设计 实现简单 仅仅几行代码就能实现高效的CNN结构设计 ArXiv https arxiv org abs 2206 03
  • 数据挖掘的基础

    目录 数据挖掘 一 数据挖掘理解 二 数据准备 1 缺失值处理 2 异常值处理 3 数据偏差的处理 4 数据的标准化 5 特征选择 三 数据建模 1 分类问题 2 聚类问题 3 回归问题 4 关联问题 四 评估模型 1 混淆矩阵与准确率指标
  • C语言删除一个字符串中的多余空格字符

    删除一个字符串中的多余空格字符 使得字符串中的每个单词之间只有一个空格字符 code C C char my delblank char str char newStr char start str while start start st
  • 2021年计算机保研经验帖(真平民)(上交网安、复旦、南大、同济、北航、东南)

    个人背景 中九5 数学辅修 数模省一 组织经历较丰富 干啥啥不行 活动第一名 软著及项目若干 无论文无科研 什么叫学混啊 有强烈的上海和南京倾向 有倾向是好事 但是也不要过于自信 因为各个学校的审核很迷 还是要适当海投保证自己有学上 夏令营
  • (二):Qt信号槽连接及触发原理

    经过 Qt信号槽之 准备阶段 学习 我们知道信号是函数 里面调用了 QMetaObject activate 函数 而对于接收端的槽函数或信号 是通过私有静态函数 qt static metacall 调用元方法 源头是有的 接收端也是有的
  • 【Vue学习笔记6】好用的 Vueuse 工具包

    1 安装Vueuse VueUse 的官方 https vueuse org 的介绍说这是一个 Composition API 的工具集合 适用于 Vue 2 x 或者 Vue 3 x 用起来和 React Hooks 还挺像的 VueUs
  • Altium Designer 13 设计备忘录7——如何让过孔/地孔覆铜全覆盖

    通常在PCB布线布局完成后 都会开始对整块板子进行覆铜 这时可能会出现以下过孔 地孔无法全覆盖的情况 通过菜单栏上的设计 Design 规则 R 找到Plane 选择Polygon Connect Style下 PolygonConnect
  • idea新建文件时没有xml文件的处理办法

    1 大部分人在新建spring项目时 会发现新建项目时没有xml文件的选项 如下图所示 2 此问题是pom文件没有正确引入依赖导致的 可以尝试在pom文件中加入spring依赖尝试一下 在pom文件中加入以下依赖 并且更新maven
  • VS编译OpenCV3

    目录 流程 源码 环境 编译完成库 流程文档转载 防丢 1 下载Cmake 2 下载OpenCV源码 3 编译OpenCV 4 最后一步 VS编译openCV 4 1编译Debug版的openCV 4 2编译Release版的openCV