用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part III

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0)

Part III

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part I_松下J27的博客-CSDN博客

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part II_松下J27的博客-CSDN博客 

            前面已经知道了如何在opencv.sln的项目中查看源码,现在看看怎么在自己创建的项目中调用opencv的库,并在debug的模式下查看源码。

1,用VS新建一个自己的项目。

 新项目的名称为OpenCVProject,放在“D:\ShaShaCoding\”文件夹下。


2,把之前build好的相关文件复制到新建项目中。

在opencv480_build文件夹下,找到我们之前编译好的install文件夹。

 


 2.1 Copy Include

把"opencv480_build"里面的"include"文件全部拷贝到新建项目OpenCVProject的文件夹中。

 2.2 Copy bin和lib

把和install同一个文件夹下x64文件夹中的bin和lib文件夹也考过去。

 

 

3,在VS中配置相关文件的路径

打开之前新建的项目OpenCVProject.

 鼠标右键单机project,打开项目属性


配置include文件夹路径:

在包含目录中,把刚刚copy过来的include文件夹的路径放进去。

 


配置lib文件夹路径:

在库目录中把copy过来的lib文件夹的目录也配置进去。

 在链接器的附加依赖项中,把lib文件夹下所有以d结尾的xx.lib文件名都复制进来。

这里有个快速方法,不需要你一个个文件名去复制。在lib文件夹中的空白处,单击鼠标右键,选择“在终端中打开”。

 在弹出的命令行中输入: ls *d.lib,系统就会自动弹出所有以d结尾的文件名。按住alt,用鼠标把Name下所有的文件名都框起来,然后用control+c复制,就全都复制好了。


配置bin文件夹路径:

 在属性窗口中的调试——>环境中加入对应路径“PATH=../bin”

这里要尤其注意你的bin文件夹在你项目文件中的相对位置/路径,如果这里配置错了,等下你运行程序的时候,系统就会报错,提示找不到xxx.dll(如下图所示)。因为运行opencv库所需的所有dll文件都保存在这个目录中。

        通过我自己的摸索,我发现,一般情况下系统默认的默认工作路径为和你项目同名的文件夹下的第二个文件夹的路径,也就是我下图中标出来的位置“D:\ShaShaCoding\OpenCVProject\OpenCVProject”。由于创建项目的方式不同,可能相对路径也不同,这时,你也可以简单的认为你当前项目的默认工作路径就是xxx.vcxproj,xxx.user和xxx.filters这些文件所在的目录。

         我所配置的命令(PATH=../bin)中的"../"就是从当前目录回退一级的意思。这样一来就回退到了下图中的目录,同时我的bin文件就保存在这个目录中。按照这个方法,你可以通过"PATH=../bin","PATH=../../bin"或"PATH=bin"等回退的方式来指定你的bin文件夹目录。

 

 到此,所有关于调用opencv库的VS配置就全都配好了。下面我们看看怎么调用,以及具体怎么在debug的时候查看opencv的源码。


4,在自己的项目中引用opencv库中的函数,并在debug时查看源码

        在VS新建的“Hello World!”的cpp文件中加入#include "..\include\opencv2\opencv.hpp",这一步是在我们自己的项目中添加opencv的头文件。

         这里我们在包含“opencv.hpp”的时候,也可以顺便检查一下我们前面添加dll时的PATH路径是否正确。毕竟,我这里是把bin文件和include文件都放在同一个目录下的。前面添加bin时所使用的是“..\bin”,这里我们用的是“..\include”。

 然后,添加两行新代码,用于测试:

如果这里不加using namespace cv,则下面的那行代码的前面就都要添加"cv::",如下图所示。

 注意:因为这里只是测试代码,所以在imread中所配置的路径也是我随意配置的,实际上这个路径下是没有任何图像的。

接下来,我们在imread的前面加一个断点,按F5开始调试。

然后不断地按F11,也就是以步进的方式debug,直到进入imread的底层核心函数。因为,opencv的每个函数都要逐个分析输入的参数,所以,F11的速度会比较慢。这里我已经看到了核心函数imread_(),所以我直接在这个函数的前面加了个断点然后选择继续。

 等黄色箭头指到这里后,再按F11就能看到核心底层代码了。

下图便是这个函数的底层代码,我就不展示了。


  (全文完)

作者 --- 松下J27

参考文献(鸣谢):

        1,Download | CMake

        2,OpenCV - Open Computer Vision Library

版权声明:文中的部分图片,文字或者其他素材,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1618552.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

理解HTTPS/TLS/SSL(一)基础概念+配置本地自签名证书

文章目录 没有HTTPS时的样子场景模拟WireShark的Capture Filter和Display Filter设置Capture Filter启动程序设置Display Filter过滤抓到的包 结论 关于为什么加密更简洁有力的回答对称加密和非对称加密和CA证书密钥交换对称加密非对称加密CA机构和证书如何解决客户端和CA机构之…

顺序表链表OJ题(1)——【LeetCode】

W...Y的主页 😊 代码仓库分享 💕 前言: 今天我们来回顾一下顺序表与链表,针对这一块我们也有许多OJ题目供大家参考。当我们学习完顺序表链表后避免不了一些习题的练习,这样才能巩固我们学习的内容。 话不多说&#xf…

PCI/PCIE总线的宏观理解

1、pcie总线协议实现的效果 (1)像访问内存一样去访问外设; (2)当建立好CPU地址空间到PCI/PCIE地址空间的映射关系后,程序访问CPU地址空间就可以达到访问PCI/PCIE地址空间的效果; 2、芯片地址空间 (1)32位的CPU寻址范围是4G,64位的…

MySQL执行更新的流程

一、加载缓存数据 引擎要执行更新语句的时候 ,比如对“id10”这一行数据,他其实会先将“id10”这一行数据看看是否在缓冲池里,如果不在的话,那么会直接从磁盘里加载到缓冲池里来,而且接着还会对这行记录加独占锁。 二…

Spring中Bean及@Bean的理解与new对象的区别

一直在纠结一个问题:new创建对象和用Bean创建对象有什么区别吗?为什么在spring中要使用Bean?Bean有什么作用? 一、Bean是啥 1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性&#x…

Spring Bean到底是什么?有什么用?

Spring Bean是什么?有什么用? 一、Bean到底是什么?二.怎么使用bean?三.Bean配置四.Bean的作用域 Bean在Spring和SpringMVC中随处可见,将这个概念内化很重要,下面分享一下我的想法: 一、Bean到底是什么? …

spring bean是什么

原文链接:https://www.awaimai.com/2596.html 歪麦博客 Spring有跟多概念,其中最基本的一个就是bean,那到底spring bean是什么? Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。 是否正确理解…

Spring Bean的作用域

在Spring中,bean作用域用于确定哪种类型的bean实例应该从Spring容器中返回给调用者。 目前Spring Bean的作用域或者说范围主要有五种。 作用域描述singleton在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值…

Spring bean是什么?

Spring有跟多概念,其中最基本的一个就是bean,那到底spring bean是什么? Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。 是否正确理解 Bean 对于掌握和高效使用 Spring 框架至关重要。 遗憾的是&#xff0…

什么是bean

什么是bean? bean是计算机自动生成的类,bean是一个由Spring IoC容器实例化、组装和管理的对象。也就是说,bean并不是程序员编辑的,而是程序运行时,由spring通过反射生成的。在程序中,我们并不使用代码去ne…

Bean介绍

1.Bean 简介 在 Spring 中,所有被IOC 容器管理的,构成应用核心骨架的对象都被成为 Bean,它是由容器来实例化、装配、管理的对象。此外,它也是你应用中众多对象的一个。Bean 以及依赖的实例化和装配等工作全部是由容器中的配置元信…

Bean专题——什么是Bean?怎么注册、使用?生命周期?作用域?

1.什么是Bean? Bean是被实例的、组装的、及被Spring容器管理的Java对象。Spring容器会自动完成Bean对象的实例化。创建应用对象之间的协作关系的行为被称为:装配,这就是依赖注入的本质。 2.Spring三种装配方案 1.隐式的bean发现机制和自动…

【Spring第三篇】什么是Bean?

在Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。 我们总结如下: 1.bean是对象,一个或者多个不限定 2.bean由Spring中一个叫IoC的东西管理 3.我们的应用程序由一个…

大数据-玩转数据-Flink窗口函数

一、Flink窗口函数 前面指定了窗口的分配器, 接着我们需要来指定如何计算, 这事由window function来负责. 一旦窗口关闭, window function 去计算处理窗口中的每个元素. window function 可以是ReduceFunction,AggregateFunction,or ProcessWindowFunction中的任意一种. Reduc…

软考:中级软件设计师:网络类型与拓扑结构,网络规划与设计,ip地址与子网划分,特殊含义的IP地址

软考:中级软件设计师:网络类型与拓扑结构 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准…

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

😈「编程小鱼酱秘密基地」:传送门 😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「网易云课堂」:传送门 😈「CSDN学院」:传送门 😈「51CTO学…

前端布局 Flex(弹性)布局

1. flex布局优点 操作方便,布局极为简单,移动端应用很广泛 pc端浏览器支持情况较差 IE11或者更低版本,不支持或仅部分支持 2. flex布局原理 flex意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都…

Java BorderLayout(边框布局)布局管理器

BorderLayout BorderLayout 将容器分为 EAST 、 SOUTH 、 WEST 、 NORTH 、 CENTER五个区域,普通组件可以被放置在这 5 个区域的任意一个中 。 BorderLayout布局 管理器的布局示意图如图所示 。 当改变使用 BorderLayout 的容器大小时, NORTH 、 SOUTH …

java:布局方法(网格布局)

网格布局 一、简单说明二、关键代码三、流程图四、例子说明1. 有17个“按钮”排列(1)源码A(2)运行效果 2. 有36个“按钮”排列(1)源码B(2)源码B运行效果 3. 有12个“按钮”排列&…

Grid布局介绍

1、什么是Grid布局 ​     Grid布局即网格布局,是一种新的css模型,一般是将一个页面划分成几个主要的区域,定义这些区域的大小、位置和层次等关系,是目前唯一一种css二维布局。 2、和flex布局的区别 ​     Grid布局和fle…