OpenCV 4.11.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
每个页面开头应添加一个额外的 Level1 标题,包含页面标题和标识符
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
语法将根据当前解析的文件类型(.hpp的C++,.h的C)进行高亮显示,或者您可以在花括号中手动指定它。
@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
切换按钮用于显示选定的配置(例如,编程语言、操作系统、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”文件,并在其中添加与现有记录类似的新记录。
它只是一个列表项,带有特殊的subpage命令,该命令将您的页面标记为子页面并将其放置到现有页面层次结构中。还要注意段落之间的列表项缩进、空行和特殊的斜体标记。