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

2023-11-10

用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 

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

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

  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 在opencv中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • 相机姿态估计(OpenCV PnP)

    我正在尝试使用网络摄像头从具有已知全球位置的四个基准点的图像中获取全局姿态估计 我检查了许多 stackexchange 问题和一些论文 但似乎无法得到正确的解决方案 我得到的位置数字是可重复的 但与相机移动绝不成线性比例 仅供参考 我正在
  • 如何将 OpenCV 等待键与 Chaquopy 一起使用

    我正在尝试使用 Chaquopy 将计算机视觉应用程序移植到 Android 当我尝试运行脚本时 以下行中出现以下错误 cv2 waitKey 100 打印到嵌入式 python 控制台的错误是 java chaquopy CQPEnv c
  • 如何提取图像中的表格

    我想从图像中提取表格 这个 python 模块https pypi org project ExtractTable https pypi org project ExtractTable 与他们的网站https www extractta
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • 编译使用Basler相机的程序

    我正在尝试使用 Basler 相机捕获图像的 C 程序来工作 我拿到 来自制造商的代码 它应该 非常容易使用 但是 链接它有 成为一场噩梦 我的 C 时代已经过去了 最近只使用 Matlab 所以我可能会犯一些愚蠢的错误 但请赐教 代码如下
  • CvMat 和 Imread 与 IpImage 和 CvLoadImage

    使用 OpenCv 2 4 我有两个选项来加载图像 1 CvMat and Imread 2 IpImage and CvLoadImage 使用哪一个更好 我尝试将两者混合并最终出现段错误 imread返回一个Mat not CvMat
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • 如何在给定目标大小的情况下在 python 中调整图像大小,同时保留纵横比?

    首先 我觉得这是一个愚蠢的问题 对此感到抱歉 目前 我发现计算最佳缩放因子 目标像素数的最佳宽度和高度 同时保留纵横比 的最准确方法是迭代并选择最佳缩放因子 但是必须有更好的方法来做到这一点 一个例子 import cv2 numpy as
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • 多视图几何

    我从相距一定距离的两台相同品牌的相机捕获了两张图像 捕获了相同的场景 我想计算两个相机之间的现实世界旋转和平移 为了实现这一点 我首先提取了两张图像的 SIFT 特征并进行匹配 我现在有基本矩阵也单应性矩阵 然而无法进一步进行 有很多混乱
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im

随机推荐

  • NB-IOT/Lora/Zigbee/WIFI/蓝牙无线组网方式的对比

    NB IOT Lora Zigbee WIFI 蓝牙无线组网方式的对比 LoRa LoRa 长 距离 是由Semtech公司开发的一种技术 典型工作频率在美国是915MHz 在欧洲是868MHz 在亚洲是433MHz LoRa的物理层 PH
  • 互联网摸鱼日报(2023-09-12)

    互联网摸鱼日报 2023 09 12 36氪新闻 东方树叶 被中年男人买疯了 马斯克重申 特斯拉将取消 实体后视镜 一封钓鱼电邮背后的AI攻防战 苹果iPhone 15系列预测分析 哪些靠谱 该选哪个版本 纯电版丰田埃尔法 难以重现燃油版的
  • PMOS 型的 LDO

    在前面讲 NMOS LDO 的时候 我们注意到 NMOS 由于它的源极和门级之间的导通门限 使 简单构成的 NMOS LDO 它输入和输出之间的压差不可能很小 必须大于这个导通门限 如果 我们引入一个单个的偏置电压对某些应用又是一个负担 因
  • Ag-grid表格 原生javascript的简单使用

    ag grid是支持多种前端框架的企业级表格框架 它能实现的功能也颇多 有兴趣的可以上他的官网api看下ag Grid官网 我这里简单写一下基础的数据初始化生成表格 1 首先引入js文件 我这里用原生的方式 并没有使用vue之类的框架的方法
  • go 进阶 https与http2

    目录 一 复习 https 与 http2 https 是什么 https 原理是什么 http 与https的区别 http2 与http1 x区别 二 golang https http2 基础示例 httputil ReversePr
  • API接口:企业信息核验

    企业信息核验是现代企业管理中必不可少的一项业务 它可以帮助企业做出正确的决策 在这篇文章里 我们将会介绍如何使用API接口来对企业信息进行核验 并实现快捷 准确的查询 一 API接口 在这里我们使用的是挖数据提供的企业信息核验API接口 它
  • opencv-python图形图像处理入门基础知识

    前往老猿Python博文目录 OpenCV 是计算机视觉中经典的专用库 其支持多语言 跨平台 功能强大 OpenCV Python为OpenCV提供了Python接口 使得使用者在Python中能够调用C C 在保证易读性和运行效率的前提下
  • 论在leetcode遇到的奇葩题解

    刷了一上午AcWing 想起来学长说面试更多的还是刷leetcode 于是就打开leetcode官网开始第一次leetcode之旅 当时没考虑太多 直接点进去了 是个中等题 很明显 线性筛嘛 也不难 然后很快就写完 然后我就看到了这个 我敲
  • Mysql数据库的安装教程

    Mysql数据库的安装教程 一 Mysql数据库介绍 二 Mysql数据库特性 1 Mysql现状 2 Mysql的几个特点 三 Mysql数据库中术语介绍 四 检查MySQL 是否安装 1 检测系统是否安装有mysql 五 安装mysql
  • 56-C语言-16进制转10进制

    问题 就是16进制的转10进制 嗯 思路 先手写一下 手推16进制转10进制怎么弄的 写完以后 变成代码 由于之前写过9进制转19进制 因此很多思想一样 这里出现了个新东西 就是10进制以后的进制 出现了字母 因此所输入的数据 变成了字符数
  • C# UDP通讯

    UDP不属于面向连接的通信 在选择协议时 选择UDP必须要谨慎 在网络质量较差情况下 UDP协议数据包丢失会比较严重 但是由于UDP的特性 它不属于连接型协议 具有资源消耗小 处理速度快等优点 所以通常音视频和普通数据在传送时使用UDP较多
  • 【开题报告】ssm电商平台2zag6计算机毕业设计程序

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 开题报告 研究背景 随着互联网技术的迅速发展 电子商务在全球范围内得到了广泛应用和普及 电商平台作为电子商务的重要组成部分 已经成为人们购物的
  • WebStorm修改Tab缩进为2,vue文件也生效,还可以修改webstrom中vue文件回车的4格缩进为2格,亲测可用

    前言 为了 遵循ESLint语法规范 我们需要使用两个空格的tab缩进 使用方法 1 打开设置 找到Code Style 2 找到JavaScript和其他类型 为了vue类型的文件 把数字都改成2 因为vue文件里面有template需要
  • 剑指 Offer 18. 删除链表的节点

    删除链表的节点 思路 先解决特殊条件 package swordPointingToTheOffer public class Eighteen public static class ListNode int val ListNode n
  • XPT2046程序例程(STM32F103C8T6)

    一 前言 本例程是使用XPT2046 AD转换IC采集电位器的数值 并通过串口调试助手打印数据 所使用的是库函数进行编写 二 XPT2046 概述 一 功能说明 XPT2046是一款4线制电阻屏控制器 内含12位分辨率125KHz转换速率逐
  • Review操作系统

    操作系统由什么组成 什么是阻塞IO和非阻塞IO 用户态到内核态怎么切换 中断的原因 进程间的通信方式 同一个机器之间的进程通信哪种最有效 select epllo 2 为什么要分页 你对操作系统内存页有什么了解 为什么要有虚拟内存 有什么用
  • JavaScript学习之ES6学习之Promise

    简介 主要介绍Promise新特性的概念和使用 概念 Promise是ES6引入的异步编程的新解决方案 语法上Promise是一个构造函数 用来封装异步操作 也就是回调函数
  • 面试笔记(四)---怎么去除url地址的参数

    javascript 删除 url 中指定参数 并返回 url 前言 在之前写了一篇博文 javascript 操作 url 中 search 部分方法函数 在这篇博文里面 我们通过写好的函数可以对url中的各种参数进行查询 设置 唯独 忘
  • Android自动调整字体大小的TextView

    文章目录 一 前言 二 设置 TextView 文本自动调整大小 2 1 默认缩放 2 2 按粒度缩放 2 3 按预设定值缩放 三 使用支持库实现文本自动缩放 一 前言 在应用开发过程中 可能需要这样的场景 一个现实区域有限的TextVie
  • 用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 ope