如何高效浏览 OpenCV 仓库以理解代码?

Posted

技术标签:

【中文标题】如何高效浏览 OpenCV 仓库以理解代码?【英文标题】:How to efficiently browse OpenCV repository to understand the code? 【发布时间】:2019-10-14 09:22:10 【问题描述】:

我对编码比较陌生,如果我的问题对您来说直截了当,我深表歉意。

我正在尝试理解 OpenCV 代码以便能够添加我的贡献(主要是将 2D 工具转换为 3D,因为这对我的机器学习项目和医疗项目很有用)。还有一些额外的好奇心,因为我喜欢了解事情是如何运作的。

1) 以 GaussianBlur 方法为例。当我在 Python 中调用它时会发生什么?即,Python 代码如何绑定到 C++ 代码?当我浏览存储库时,有所有 C++ 文件,我找不到它在哪里完成。当我用 pip 安装 cv2 时,一切都是自动的,但我想了解这个过程。

2)如果我想了解整个 GaussianBlur 算法,我也不熟悉 C++ 浏览,那么我应该如何继续检索使用的文件(方法和继承的类)。 我在另一个答案中发现https://github.com/opencv/opencv/blob/9c23f2f1a682faa9f0b2c2223a857c7d93ba65a6/modules/imgproc/src/smooth.cpp#L4085 包含该方法,但是我如何自己找到任何方法?为什么它不在主文件夹中,而是在 blob 文件夹中?那么如何找到这个调用的其他方法或类呢?

3) 这更像是一个好奇的问题,因为我不熟悉 makefile,但是 Python 和 C++ 之间的绑定何时完成?当我使用 pip 安装 OpenCV 时,它会自动完成,但我想了解这个过程。

非常感谢您的回答!我会很感激任何教程,因为我在问之前已经用谷歌搜索了很多,当然,但没有找到什么可以帮助我自己。

【问题讨论】:

请问你用的是什么IDE? 我只是在浏览 GitHub 存储库。否则,我使用 Jupyter Notebook for Python 和 Visual Studio Code for C++ 您应该克隆代码以在您的 IDE 中打开它。它将大大简化浏览代码的过程。要了解 c++ 代码,您可以搜索要查找的函数,例如ctrl + F -> gaussian。您将找到函数定义并可以通读代码。如果您在该功能中发现有趣的内容,您只需按right mouse button,然后按go to definition 还可以查看here 以了解如何从 c++ 创建 python 模块以及如何在 python 内部使用它 【参考方案1】:

在 C++ 中,您必须在编译和链接过程中下载库并链接它们(从源代码创建可执行文件时)。

C++ 绑定使用 python.h c++ 库完成。使用此绑定 OpenCV 模块是为 python 创建的。

对于学习高斯模糊等可以学习图像处理

Opencv 的方法保存在各自的文件中。像 opencv2/highgui.hpp 用于 OpenCV GUIimshow。您可以使用#include <opencv2/highgui.hpp>将它们导入C++(方法被分开到不同的文件中,以减少导入不必要的方法)。

CMake 就像一种脚本语言(它是一种工具),您可以在其中编写一个脚本,说明该工具应如何从源代码构建可执行文件

入门教程是Here

【讨论】:

非常感谢!其实用OpenCV不会给我带来问题,GaussianBlur也不会,更多的是理解代码,如何找到其他方法的代码,如何高效浏览我想理解的repo c++ 中的OpenCV 类似于python OpenCV,方法已在文件之间拆分。您可以使用 here 中的 搜索框index 来搜索所需的功能。 我使用谷歌查找我在这里找不到的东西。要浏览方法代码,请转到github中的源代码

以上是关于如何高效浏览 OpenCV 仓库以理解代码?的主要内容,如果未能解决你的问题,请参考以下文章

不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?

OpenCV中高效的像素遍历方法,写出工程级像素遍历代码

如何使用 OpenCV 在 C++ 中实现高效的 im2col 函数?

git 指令记录

MySQL索引底层实现

matlab代码到opencv代码的转换