1.OpenCV具有模块化结构,这意味着该软件包包含多个共享或静态库。以下模块可用:
核心功能 - 定义基本数据结构的紧凑模块,包括密集的多维数组Mat和所有其他模块使用的基本功能。图像处理 - 一个图像处理模块,包括线性和非线性图像滤波,几何图像转换(调整大小,仿射和透视变形,基于通用表格的重新映射),色彩空间转换,直方图等。
视频 - 视频分析模块,包括运动估计,背景扣除和对象跟踪算法。
calib3d - 基本多视图几何算法,单个和立体相机校准,对象姿态估计,立体对应算法和三维重建元素。
特征 2d - 显着特征检测器,描述符和描述符匹配器。
objdetect -预定义的类的对象和实例的检测(例如,脸,眼睛,杯子,人,车,等等)。
highgui - 简单的用户界面功能的简单易用的界面。
视频I / O - 一个易于使用的视频捕捉和视频编解码器界面。
gpu - 来自不同OpenCV模块的GPU加速算法。
...一些其他的辅助模块,如FLANN和Google测试包装,Python绑定等等。
文档的其他章节描述了每个模块的功能。但是首先要确保熟悉库中使用的通用API概念。
2.API概念
cv Namespace
All the OpenCV classes and functions are placed into the cv namespace. Therefore, to access this functionality from your code, use the cv:: specifier or using namespace cv; directive 所有的OpenCV类和函数都被放置在cv命名空间中。因此,要从您的代码中访问此功能,请使用cv ::说明符或使用命名空间cv; 指示:
#include "opencv2/core.hpp"
...
cv::Mat H = cv::findHomography(points1, points2, CV_RANSAC, 5);
...
或者
#include "opencv2/core.hpp"
using namespace cv;
...
Mat H = findHomography(points1, points2, CV_RANSAC, 5 );
...
Some of the current or future OpenCV external names may conflict with STL or other libraries. In this case, use explicit namespace specifiers to resolve the name conflicts: 一些当前或未来的OpenCV外部名称可能与STL或其他库冲突。在这种情况下,使用显式名称空间说明符来解决名称冲突:
Mat a(100, 100, CV_32F);
randu(a, Scalar::all(1), Scalar::all(std::rand()));
cv::log(a, a);
a /= std::log(2.)