OpenCV 3.x Lib 源码结构简介

本文介绍了OpenCV3.x的主要变化,包括C++风格API的采用与简化,以及面向对象特性的引入。详细列举了OpenCV3.x的源代码结构与非GPU和GPU相关模块的功能,涵盖从图像处理到机器学习等多个方面。
OpenCV 3.x 与之前版本的不同

1)以C++ 风格API为主,C 风格的API 最终可能会取消。
2)C++ API 更加简洁,引入很多C++面向对象的特性
3) 算法都将继承自 cv::Algorithm 接口。
4) 模块分类细化,意义和功能明显。

源代码结构

1)3rdparty/,OpenCV  依赖的第三方库,比如:ffmpeg,jpg、png、tiff等。

2)apps/,包含进行 haar 分类器训练的工具,opencv 进行人脸检测便是基于 haar 分类器。

3)cmake/,OpenCV工程编译需要的cmake相关文件,用于智能搜索第三方库。

4)include/,工程头文件。其中,C 语言风格的API在opencv 子文件夹中 ,opencv2 子文件中有一个 opencv.hpp 文件, cv2.x和cv3.x推荐使用。

5)modules/,功能模块核心代码。

6)platforms/,交叉编译所需的工具链及额外的代码。

7)samples/,OpenCV的使用范例

8)data/, opencv 库以及范例中用到的资源文件,例如人脸检测的模型数据文件等。

9)doc/,编译生成文档所需文件及辅助脚本。

非GPU相关模块

1)androidcamera/,android平台相机设备相关接口。

2)core/,核心模块,定义基本的数据结构,例如:Mat 类、XML 读写、opengl三维渲染等。

3)imgproc/,含图像滤波、集合图像变换、直方图计算、形状描述子等功能。

4)imgcodec/,各种格式的图片的读写。

5)highgui/,高级图形界面及与 QT 框架的整合。

6)video/,视频分析相关模块。包括背景提取、光流跟踪、卡尔曼滤波等。

7)videoio/,视频文件读写读写相关,包含摄像头、Kinect 等的输入。

8)calib3d/,相机标定及三维重建相关。相机标定用于消除广角相机画面畸变。三维重建,例如,在双目视觉(立体视觉)中,基于两个标定的摄像头观察同一个场景,计算两幅画面中的相关性来估算像素的深度。

9)features2d/, 2D 特征值检测的框架。包含各种特征值检测器及描述子,例如 FAST、MSER、OBRB、BRISK等。各类特征值拥有统一的算法接口,因此在不影响程序逻辑的情况下可以进行替换。

10)objdetect/,物体检测模块。包括haar分类器、SVM检测器及文字检测。

11) ml/,机器学习相关。包括统计模型、K最近邻、支持向量机、决策树、神经网络等经典的机器学习算法。

12)flann/,多维空间内聚类及搜索近似最近邻的算法。

13)photo/,计算摄影学。包括图像修补、去噪、HDR成像、非真实感渲染等。可实现类似Photoshop高级功能。

14)stitching/,图像拼接,全景制作。

15)nonfree/,有专利的算法。如:SIFT和SURF。

16)shape/,形状匹配相关模块。用于描述形状、比较形状。

17)softcascade/,Soft Cascade 分类器物体检测算法,含检测和训练模块。

18)superres/,超分辨率相关,增强图像的分辨率。

19)videostab/,视频消除抖动相关,例如,用于解决相机移动时拍摄的视频不稳定问题。

20)viz/,三维可视化模块。一个简单的三维可视化引擎,有各种UI控件和键盘、鼠标交互方式,底层实现基于 VTK 库。

GPU相关模块

模块的名称以 cuda 为开始,cuda 是显卡制造商 NVIDIA 推出的通用计算语言,cv3中有大量的模块已基于cuda实现。

1)cuda/,CUDA-加速的计算机视觉算法,包括数据结构 cuda::GpuMat、 基于cuda的相机标定及三维重建等。

2)cudaarithm/,CUDA-加速的矩阵运算模块。

3)cudabgsegm/,CUDA-加速的背景分割模块,通常用于视频监控。

4)cudacodec/,CUDA-加速的视频编码与解码。

5)cudafeatures2d/,CUDA-加速的特征检测与描述模块,与features2d/模块功能类似。

6)cudafilters/,CUDA-加速的图像滤波。

7)cudaimgproc/,CUDA-加速的图像处理算法,包含直方图计算、霍夫变换等。

8)cudaoptflow/,CUDA-加速的光流检测算法。

9)cudastereo/,CUDA-加速的立体视觉匹配算法。

10)cudawarping/,实现了 CUDA-加速的快速图像变换,包括透视变换、旋转、改变尺寸等。

11)cudaev/,实现 CUDA 版本的核心功能,类似 core/ 模块中的基础算法。


参考文献
1)http://blog.youkuaiyun.com/zkl99999/article/details/48676487
2)opencv online doc
### 安装和配置 OpenCV 3.x 的步骤 OpenCV 3.x 版本在某些旧项目或依赖中仍然广泛使用。以下是安装和配置 OpenCV 3.x 的详细步骤,适用于 Ubuntu 系统。 #### 1. 安装依赖项 在开始安装 OpenCV 之前,确保系统已经安装了必要的依赖项。可以通过以下命令安装: ```bash sudo apt-get update sudo apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev ``` 这些依赖项包括构建 OpenCV 所需的编译工具和多媒体库 [^4]。 #### 2. 下载 OpenCV 源码 从 GitHub 获取 OpenCV 3.x 的源代码。可以使用 `wget` 命令下载并解压: ```bash wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.zip unzip opencv.zip ``` 如果需要安装 `opencv_contrib` 模块,可以使用以下命令: ```bash wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.zip unzip opencv_contrib.zip ``` 确保解压后的文件夹名称与 OpenCV 主版本一致,例如 `opencv-3.4` 和 `opencv_contrib-3.4` [^3]。 #### 3. 配置编译选项 进入 OpenCV 源码目录并创建一个构建目录: ```bash cd opencv-3.4 mkdir build cd build ``` 使用 `cmake` 配置编译选项。对于 OpenCV 3.x,默认情况下 `OPENCV_GENERATE_PKGCONFIG` 是开启的,因此可以直接使用: ```bash cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4/modules .. ``` 此配置指定了安装路径、构建类型,并启用了 `opencv_contrib` 模块 [^1]。 #### 4. 编译和安装 配置完成后,开始编译 OpenCV: ```bash make -j$(nproc) ``` 编译完成后,安装 OpenCV 到指定路径: ```bash sudo make install ``` 编译过程可能需要一些时间,具体取决于系统的硬件性能 。 #### 5. 配置环境变量 安装完成后,需要配置环境变量以便系统能够找到 OpenCV 库。编辑 `/etc/ld.so.conf.d/opencv.conf` 文件并添加以下内容: ```bash /usr/local/lib ``` 然后运行以下命令更新动态链接库缓存: ```bash sudo ldconfig ``` 此外,还需要设置 `PKG_CONFIG_PATH` 环境变量,以便 `pkg-config` 能够找到 OpenCV 的配置文件: ```bash export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig ``` 可以将上述命令添加到 `~/.bashrc` 文件中,以便每次启动终端时自动生效: ```bash echo &#39;export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&#39; >> ~/.bashrc source ~/.bashrc ``` 这些步骤确保了 OpenCV 3.x 能够正确地被系统识别和使用 。 #### 6. 验证安装 最后,验证 OpenCV 是否安装成功。可以编写一个简单的测试程序来检查 OpenCV 的版本: ```cpp #include <opencv2/opencv.hpp> #include <iostream> int main() { std::cout << "OpenCV version: " << CV_VERSION << std::endl; return 0; } ``` 编译并运行该程序: ```bash g++ test_opencv.cpp `pkg-config --cflags --libs opencv` ./a.out ``` 如果输出了 OpenCV 的版本号,则表示安装成功 [^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值