OpenCV 4.10.0
开源计算机视觉
|
原作者 | Maksim Shabunin |
兼容性 | OpenCV >= 3.0 |
Doxygen 是一款文档生成系统,具有众多强大功能,例如
现有的 OpenCV 库文档已转换为 doxygen 格式。
请查看官方 下载 和 安装 页面。一些 Linux 发行版还可以提供 doxygen 包。
整体文档从许多不同地方收集
以下方案表示 opencv 存储库的通用文档放置
自 3.0 版本后,所有新模块都被放入 opencv_contrib 存储库,它的布局略有不同
如需为函数、类和其他实体添加文档,只需在其定义之前插入特殊注释。如下所示
/** @brief Calculates the exponent of every array element. The function exp calculates the exponent of every element of the input array: \f[ \texttt{dst} [I] = e^{ src(I) } \f] The maximum relative error is about 7e-6 for single-precision input and less than 1e-10 for double-precision input. Currently, the function converts denormalized values to zeros on output. Special values (NaN, Inf) are not handled. @param src input array. @param dst output array of the same size and type as src. @sa log , cartToPolar , polarToCart , phase , pow , sqrt , magnitude */ CV_EXPORTS_W void exp(InputArray src, OutputArray dst);
在此处可以看到
/** ... */
brief
表示后面的段落是一个简要说明@brief
f[
和 f]
命令之间的 TeX 公式\f[ ... \f]
param
表示后面的单词是参数名称,后面的文本是该参数的说明;所有参数都放置在一个列表中@param
sa
开始“另请参见”段落,其中包含对某些类、方法、页面或 URL 的引用。@sa
生成的引用项目如下所示:
“更多...”链接将您带到函数文档:
可对单行短注释使用不同的注释语法
//! type of line enum LineTypes { FILLED = -1, LINE_4 = 4, //!< 4-connected line LINE_8 = 8, //!< 8-connected line LINE_AA = 16 //!< antialiased line };
此处
//!
<
表示此注释位于已记录实体之后//!<
生成的文档块如下所示:
Doxygen 命令以 @
或 \
符号开头
@brief ... or \brief ...
Doxygen 注释可采用不同的形式
C-style: /** ... */ or /*! ... */ C++-style //! ... or /// ... Lines can start with '*': /** * ... * ... */ Can be placed after documented entity: //!< ... /**< ... */
要结束段落,请插入空行或任何启动新段落的命令
@brief brief description paragraph brief continues new paragraph @note new note paragraph note paragraph continues another paragraph paragraph continues
页面、锚点、组和其他命名实体在整个项目中应具有唯一名称。为这些标识符添加模块名称作为前缀是个好主意
@page core_explanation_1 Usage explanation @defgroup imgproc_transform Image transformations @anchor mymodule_interesting_note
Doxygen 支持 Markdown 格式以及一些扩展。以下简要描述了语法引用,有关详细信息,请访问 Markdown 支持。
Bulleted: - item1 - item2 Numbered: 1. item1 2. item2 or -# item1 -# item2
_italic_ __bold__ use html in complex cases: <em>"path/to/file"</em>
explicit link: [OpenCV main site](https://opencv.ac.cn) automatic links: <https://opencv.ac.cn> or even: https://opencv.ac.cn
![image caption](image path)
Level1 ====== Level2 ------ ### Level3 #### Level4
可以向任何标题分配唯一标识符,以便从此处引用。
Header {#some_unique_identifier} ------ ... See @ref some_unique_identifier for details
每个页面在开头应有附加的第 1 级标题,其中包含页面标题和标识符
Writing documentation for OpenCV {#tutorial_documentation} ================================
Doxygen 文档的示例
First Header | Second Header ------------- | ------------- Content Cell | Content Cell Content Cell | Content Cell
这里用简短的示例介绍使用频率最高的 doxygen 命令。要了解完整可用命令和详细描述,请访问命令参考。
param - 函数参数的描述。
多个相邻的语句被合并成一个列表。如果在实际函数签名中找不到具有此名称的参数,则会生成 doxygen 警告。函数可以没有已记录参数,也可以记录所有参数。
ref
命令引用的不可见命名锚点。只能在页面中使用。ref - 对命名部分、页面或锚点的显式引用。
如果找不到此类实体,则会生成 doxygen 警告。此命令有一个可选参数 - 链接文本。
Doxygen 还会自动生成一些链接:如果文本包含可查找到记录实体的单词,则会生成引用。可以通过在单词前加 %
符号来禁用此功能。
Explicit reference: @ref MyClass Explicit named reference: @ref example_page "Example page" Implicit reference: cv::abc::MyClass1 or just MyClass1 Disable implicit reference: %MyClass1
f - 公式
内联公式用 f$
命令包围
\f$ ... \f$
块公式 - 用 f[
和 f]
命令
\f[ ... \f]
若要在文档中将某些文本标记为代码,则使用 code 和 endcode 命令。
@code float val = img.at<float>(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101), borderInterpolate(-5, img.cols, cv::BORDER_WRAP)); @endcode
语法会根据当前解析的文件类型(C++ 表示 .hpp,C 表示 .h)高亮显示,也可以在花括号中手动指定。
@code{.xml}
若要将整个示例文件包含到文档中,则使用 include 和 includelineno 命令。该文件在常见样本位置中搜索,因此你只需指定其名称或路径的一部分。includelineno 版本还会显示行号,但会阻止拷贝粘贴,因为包括了行号。
@include samples/cpp/test.cpp
如果要包括现有示例文件的某些部分,请使用 snippet 命令。
首先,使用特殊的 doxygen 注释标记文件所需的部分
//! [var_init] int a = 0; //! [var_init]
然后将此代码段包含到文档中
@snippet samples/cpp/test.cpp var_init
切换按钮用于显示所选配置(例如编程语言、OS、IDE)。
若要将按钮用于文档中,请使用add_toggle 和 end_toggle 命令。
add_toggle 命令可以
示例
@add_toggle{Button Name} text / code / doxygen commands @end_toggle
例如使用带有文本和 代码 片段的切换按钮
### Buttons Example @add_toggle_cpp Text for C++ button @snippet samples/cpp/tutorial_code/introduction/documentation/documentation.cpp hello_world @end_toggle @add_toggle_java Text for Java button @snippet samples/java/tutorial_code/introduction/documentation/Documentation.java hello_world @end_toggle @add_toggle_python Text for Python button @snippet samples/python/tutorial_code/introduction/documentation/documentation.py hello_world @end_toggle
结果如下所示
如您所见,按钮会自动添加到上一个标题的下方。
所有代码实体均应放入代表 OpenCV 模块及其内部结构的命名组中,因此应将每个模块与具有相同名称的组关联起来。定义组和子组的最佳位置是此模块的主头文件:"<module>/include/opencv2/<module>.hpp"。
/** @defgroup mymodule My great module optional description @{ @defgroup mymodule_basic Basic operations optional description @defgroup mymodule_experimental Experimental operations optional description @} */
若要将类和函数放入特定组中,只需将其文档添加到 ingroup
命令或使用 addtogroup
命令包装整个代码块即可
/** @brief Example function @ingroup mymodule */ or /** @addtogroup mymodule_experimental @{ */ ... several functions, classes or enumerations here /** @} */
使用cite 命令插入对 参考文献 页面中所列相关出版物的引用。
首先,将出版物的 BibTeX 记录添加到 "<opencv>/doc/opencv.bib" 或 "<opencv_contrib>/modules/<module>/doc/<module>.bib" 文件
@ARTICLE{Bradski98, author = {Bradski, Gary R}, title = {Computer vision face tracking for use in a perceptual user interface}, year = {1998}, publisher = {Citeseer} }
然后使用 cite 命令添加引用
@cite Bradski98
本节中所述的步骤可用作编写文档过程中的检查表。不一定按相同的顺序执行,但有些步骤确实取决于先前的步骤。当然,这些步骤只是基本指南,始终有发挥创造力的余地。
制作示例应用程序,简单到初学者也能懂。简明扼要,撰写描述性的注释,不要试图规避任何可能出现的运行时错误或制作通用实用程序。目的是阐述想法,且应包含在一个源文件内!
如果你想将此文件中的代码块插入教程内,请使用特殊的 Doxygen 注释对其进行标记(参见此处)。
如果你想使用多种编程语言撰写教程,请使用主题切换按钮来选择不同的注释和代码(参见此处)。
收集应用程序作业结果。可采用“前后”图像,或一些代表性能的数字,甚至视频。
以适当格式保存,以便稍后在教程中使用
-DBUILD_EXAMPLES=ON
选项时,将其与 OpenCV 库一起编译。@prev_tutorial{identifier} @next_tutorial{identifier}
@prev_tutorial{#tutorial_documentation}正确
@prev_tutorial{tutorial_documentation}
描述你的结果,插入之前添加的图像或其他结果。
若要添加 YouTube 视频,例如 www.youtube.com/watch?v= ViPN810E0SU,请使用 youtube{视频 ID}
@youtube{ViPN810E0SU}
将新创建的教程添加到相应的内容表中。只需查找带有所需表格的 “table_of_content_*.markdown” 文件,并在其中按照现有记录添加新记录。
它仅仅是一个带有特殊子页面指令的列表项,该指令将你的页面标记为子页面,并将其放置到现有的页面层次结构中。此外,请注意列表项缩进、段落之间的空行以及特殊的斜体标记。