用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
参考文献(鸣谢):
2,OpenCV - Open Computer Vision Library

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