用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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven的profiles多环境配置

一个项目通常都会有多个不同的运行环境,例如开发环境,测试环境、生产环境等。而不同环境的构建过程很可能是不同的,例如数据源配置、插件、以及依赖的版本等。每次将项目部署到不同的环境时,都需要修改相应的配置,这样…

学习node之——如何在项目中使用MySQL、前后端的身份认证

上一篇文章只写了一丢丢,这篇才是正片,look look look 一、使用mysql模块操作数据库 1、查询数据 这里连接数据库的用户和密码都是我们在安装mysql时配置的密码。每个人的users表格里面数据不同,结果也会不一样哟! // 导入mys…

统一网关Gateway

文章目录 概览网关的作用搭建网关断言工厂路由过滤器全局过滤器案例 过滤器执行顺序跨域问题 概览 网关的作用 搭建网关 断言工厂 路由过滤器 全局过滤器 案例 过滤器执行顺序 跨域问题

QT基础教程之四QMainWindow

QT基础教程之四QMainWindow QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序…

【c语言】输出n行按如下规律排列的数

题述:输出n行按如下规律排列的数 输入: 4(应该指的是n) 输出: 思路: 利用下标的规律求解,考察数组下标的灵活应用,我们可以看出数从1开始是斜着往下放的,那么我们如何利用两层for循环求解这道题&#xff…

打造完美直播:深入解析人脸美颜SDK的算法与特性

在如今数字化的时代,直播已经成为了人们与世界互动的重要方式之一。而在众多直播平台中,吸引观众并提供高质量的视觉体验成为了至关重要的任务。其中,人脸美颜技术的应用对于提升直播质量和观众体验起到了不可忽视的作用。本文将深入解析人脸…

【pyqt5界面化工具开发-13】QtDesigner功能择优使用

目录 0x00 前言: 一、完成基本的布局 二、其他功能的使用 三、在代码行开发 0x00 前言: QtDesigner工具的择优使用: 1、他的界面开发,是我们主要需要使用的功能 2、他的其他功能的使用,有需要就可使用&#xff…

【java】【已解决】IDEA启动报错:Lombok Requires Annotation Processing

解决办法: 1、根据异常提示操作: 直接点击错误提示后面的蓝色标识【Enable】(小编点完了所以变灰色),此操作等价于下面的步骤: 【File】-->【Settings】-->【Build】-->【Compiler】-->【Ann…

42、Flink 的table api与sql之Hive Catalog

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

校园用电安全管理系统可以识别违规电器吗

校园用电安全管理系统是处理恶意用电问题有效手段之一,系统具有实时监测、异常预警、监测设备运行状态、远程控制用电等功能,可以从根本上管理学校用电量,制定合理的用电计划,限制用电成本,避免各种恶意用电行为&#…

单片机学习-蜂鸣器如何发出声音

硬件电路 软件编写 ①发出声音 #include "reg52.h" typedef unsigned int u16; // 重新定义 类型 typedef unsigned char u8; // 重新定义 类型sbit BEEP P2^5; //定义 P2第五个管教 为BEEP // 延时函数 void delay_time(u16 times) {while(times--); } vo…

2022年下半年系统架构设计师真题(下午带答案)

试题一 (25分) 某电子商务公司拟升级其会员与促销管理系统,向用户提供个性化服务,提高用户的粘性。在项目立项之初,公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性,由于当前用户规模不大,业务也相对…

Mac版JFormDesigner IDEA插件安装(非商业用途)

前言 仅供个人开发者使用,勿用作商业用途。 仅供个人开发者使用,勿用作商业用途。 仅供个人开发者使用,勿用作商业用途。 感觉做了这些年开发,怎么感觉市场越搞越回去了。桌面应用又成主流了? 甲方让做桌面客户端&am…

C语言:递归思想及实例详解

简介:在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。通过函数的自调用化繁为简。 递归可以说是编程中最神奇的一种算法。因为我们有时候可能不能完全明晰代码的运行过程,但是我们却知道代码可以跑出正确的结果。而当我们使…

自动驾驶攻城战,华为小鹏先亮剑

点击关注 文|刘俊宏 编|苏扬、王一粟 本文为光锥智能x腾讯科技联合出品 2023年过半,城市NOA(城市领航辅助驾驶)的元年如预期中到来了吗? 8月25日,成都车展开幕,与4个月之前的上海…

(笔记五)利用opencv进行图像几何转换

参考网站:https://docs.opencv.org/4.1.1/da/d6e/tutorial_py_geometric_transformations.html (1)读取原始图像和标记图像 import cv2 as cv import numpy as np from matplotlib import pyplot as pltpath r"D:\data\flower.jpg&qu…

[PyTorch][chapter 53][Auto Encoder 实战]

前言: 结合手写数字识别的例子,实现以下AutoEncoder ae.py: 实现autoEncoder 网络 main.py: 加载手写数字数据集,以及训练,验证,测试网络。 左图:原图像 右图:重构图像 ----main----- 每轮训…

【哈士奇赠书活动 - 37期】- 〖深入浅出SSD:固态存储核心技术、原理与实战 第2版〗

文章目录 ⭐️ 赠书 - 《深入浅出SSD:固态存储核心技术、原理与实战 第2版》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《深入浅出SSD:固态存储核心技术、原理与实战 第2版》 ⭐️ 内容简介 本书从基础认知、核心技…

快速制作餐厅签到抽奖营销活动,吸引更多顾客

在如今竞争激烈的市场中,吸引用户参与活动是企业获取关注和提升转化率的重要手段。而签到抽奖活动无疑是一种简单而又有效的方式。本文将教你如何利用乔拓云平台后台制作一个快速而有效的签到抽奖活动。 首先,登录乔拓云平台后台,进入【营销活…

【云原生进阶之PaaS中间件】第一章Redis-2.3.3集群模式

1 集群模式 Redis集群是一个提供在多个Redis节点之间共享数据的程序集。它并不像Redis主从复制模式那样只提供一个master节点提供写服务,而是会提供多个master节点提供写服务,每个master节点中存储的数据都不一样,这些数据通过数据分片的方式被自动分割到不同的master节点上…