用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://www.hqwc.cn/news/90804.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零构建深度学习推理框架-11 Resnet

op和layer结构 在runtime_ir.cpp中,我们上一节只构建了input和output,对于中间layer的具体实现一直没有完成: for (const auto& kOperator : this->operators_) {if (kOperator->type "pnnx.Input") {this->input_o…

十五、模板方法模式

一、什么是模板方法模式 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模板方法模式包含以…

zookeeper 3.8.1安装和入门使用

1、zookeeper环境搭建(Windows单机版) 1.1、 前提 必须安装jdk 1.8,配置jdk环境变量,步骤略 1.2、安装zookeeper 地址:https://zookeeper.apache.org/ 1.2.1、选择releases版本 1.2.2、下载安装包并解压 1.2.3、配…

成集云 | 钉钉财务费用单同步至畅捷通 | 解决方案

源系统成集云目标系统 方案介绍 财务管理作为企业管理中重要的组成部分,在企业的发展和成长中扮演着重要角色,成集云以钉钉费用单OA审批与畅捷通TCloud系统为例,与钉钉连接器深度融合,通过数据处理和字段匹配实现了费用…

【redis问题】Caused by: io.netty.channel

遇到的问题: 在使用 RedisTemplate 连接 Redis 进行操作的时候,发生了如下报错: 测试代码为: 配置文件: 问题根源: redis没有添加端口映射解决方案: 删除原来的redis容器,添加新…

高忆管理:大盘是什么意思?

随着市场经济的开展,股票、基金等金融出资产品的普及,大盘这个词汇也逐步进入了咱们的生活中。那么,大盘又是什么意思呢? 从基本概念视点来看,大盘是指股票市场全体走势的指标。出资者经过调查大盘指数的改变&#xf…

luckfox pico 使用记录

连接 使用USB转TTL 连接 USB 也要一起插上 在显示控制台窗口上会显示板子的IP地址 USB接上后 会在网络和共享中心发现 以太网2(通过RNDIS 通过USB 将板当网卡用,但使用网络共享,无法ping 通外部网) 可以不关闭防火墙(WIN10 6…

睿趣科技:抖音开网店卖玩具怎么样

近年来,随着社交媒体平台的飞速发展,抖音作为一款短视频分享应用也迅速崭露头角。而在这个充满创业机遇的时代背景下,许多人开始探索在抖音平台上开设网店,尤其是卖玩具类商品,那么抖音开网店卖玩具究竟怎么样呢? 首先…

分享一篇关于如何使用BootstrapVue的入门指南

你想轻松地创建令人惊叹且响应式的在线应用程序吗?使用BootstrapVue,您可以快速创建美观且用户友好的界面。这个开源工具包是基于Vue.js和Bootstrap构建的,非常适合开发现代Web应用程序。本文将介绍其基础知识,让您可以开始使用这…

ChatGPT的局限性及商业化应用限制讨论

首先,ChatGPT仅使用公开可用的信息,这是其第一个局限。如果基础信息缺失、过时、模糊或过于泛化,AI生成的内容就将不会准确。 只有在使用企业内部专有信息和知识创建特定的GPT时,才会出现真正的商业化解决方案。但对企业而言&…

【函数栈帧解析:代码的迷人堆积和无限嵌套】

本章重点 一、何为函数栈帧 二、函数栈帧特性 - 同栈 - 后进先出 三、认识内存空间布局图 四、认识相关寄存器 五、认识相关汇编命令 六、测试代码: 七、函数栈帧全过程 要解决的问题​​​​​​​ 局部变量是怎么创建的?为什么局部变量的值是随机值&am…

Linux中的dpkg指令(dpkg -l | grep XXX等)

dpkg是Debian包管理系统中的一个工具,用于在Linux系统中安装、升级、删除和管理软件包。它是Debian、Ubuntu以及基于它们的发行版中的包管理器。 dpkg 有很多用法,常用之举例:dpkg -l | grep apt 显示系统中安装的与apt相关(命名&#xff09…