最近一直在做opencv3.0的总结,想比较全面的了解一下3.0版本的功能,以及与2.x版本的区别,但是因为对2.x理解也不是很深,所以不能拿出来对比。
在此,我只是介绍一下3.0版本中各个modules的大致包含的功能,此外还有一些contribute库的程序,由于精力有限,没有跑完所有的程序,搜易还处于待完善的阶段。。。
【adas】:Contribute库
作用未知
【aruco】:Contribute库
作用未知
【bgsegm】:Contribute库
前景与背景的分析,提取目标等方法。
【bioinspired】:Contribute库
作用未知
【calib3d】:官方库
相机标定以及三维图像的重建。相机标定用于去除相机自身的缺陷导致的画面的畸变,还原真实的场景,确保计算的准确性。三维重建通常用在双目视觉(立体视觉),即两个标定后的摄像头观察同一场景,通过计算两幅画面中的相关性来计算像素的视觉深度。
【ccalib】:Contribute库
作用未知
【contrib_world】:Contribute库
为了丰富框架,里面没有什么实际的东西(起码目前没有)
【core】:官方库
核心功能模块,定义了基本的数据结构,包括最重要的Mat 类,XML的读写,OpenGL三维渲染等。
【cudaarithm / cudabgsegm / cudacodec / cudafeatures2d / cudafilters / cudaimgproc / cudalegacy / cudaobjdetect / cudaoptflow / cudastereo / cudawarping / cudev】:
cuda模块。没有使用,所以就没有测试
【cvv】:Contribute库
用来调试opencv程序的,被命名为visual debug,调试的信息会在命令行显示,也就是DOS窗口,此外需要CMake2.8以上
【datasets】:Contribute库
opencv程序的数据集模块,提供了一种数据集的数据类型,这种类型有很多的变形,比如(AR_hmdb,FR_adienceObj,GR_chalearn。。。)
使用方法:
Ptr<AR_hmdb> dataset = AR_hmdb::create();
Ptr<FR_adience> dataset = FR_adience::create();
Ptr<GR_chalearn> dataset = GR_chalearn::create();
注:记得在使用前加上 “ using namespace cv::datasets; ”
【dnn】:Contribute库,需要在cmake的时候讲build_dnn 勾选上。
通过训练 *GoogLeNet* 网络,来实现图像的分类,实例的网址是:
https://github.com/ludv1x/opencv_contrib/blob/master/modules/dnn/samples/caffe_googlenet.cpp
如果你需要这部分的内容,需要读一下:
tutorial_dnn_googlenet.markdown文件
【dpm】:Contribute库,全称是 Cascade object detection with deformable part models:可变模型的级联目标检测(不知道翻译的对不对 *!#_#!*)
也就是说这部分是用来做目标检测的,想要用这种方法,你需要知道模型的路径(data中的inriaperson.xml文件)。使用方法如下:
// load model from model_path
cv::Ptr<DPMDetector> detector = DPMDetector::create(vector<string>(1, model_path));
// read image from image_path
Mat image = imread(image_path);
// detection
vector<DPMDetector::ObjectDetection> ds;
detector->detect(image, ds);
【face】:Contribute库,最近新增加的人脸识别程序
The currently available algorithms are:
- Eigenfaces (see createEigenFaceRecognizer) -- 特征脸
- Fisherfaces (see createFisherFaceRecognizer) -- Fisher脸
- Local Binary Patterns Histograms (see createLBPHFaceRecognizer) -- 本地二进制直方图效果还没有测,喜欢的朋友可以试一下
【features2d】:官方库
包含2D特征值检测的框架。包含各种特征值检测器以及描述符,比如,AKAZE、FAST,KAZE,MSER,ORB,brisk,各类特征拥有统一的算法接口,因此在不影响程序逻辑的情况吓可以进行替换。
【flann】:官方库
用于在多维空间内聚类及搜索的近似算法,做图像检索的开发者对他不会陌生的。
【hal】:官方库
-- 数值计算方法:如arctan2(y,x),invSqrt,sqrt,exp,log
--矩阵运算方法:如LU分解,Cholesky分解(也就是下三角分解)
--滤波函数方法:normHamming,normL2Sqr_,normL1_
【highgui】:官方库
高级图形界面及多媒体文件读写,包括用户界面、QT、对图像及视频文件的读写操作。
【imgcodecs】:官方库
图像的编解码信息,比如png,bmp,pgm,tiff等。与highgui协同工作,具体功能不祥。
【imgproc】:官方库,全称Image Processing
图像处理的库,包括图像滤波,几何图像变换,直方图计算,形状描述子,形态学操作等。图像处理是计算机视觉的重要工具。
【line_descriptor】:Contribute库
线段描述符,也就是LSD算法(Line Segment Detector)。
- 用 *BinaryDescriptor* 提取图像中的线段保存到 *KeyLine* 中
- 然后计算这些KeyLine的描述符
- 最后用 *BynaryDescriptorMatcher* 来匹配两个图中的线段。
opencv3.0 提供了一个*LSDDetector* 类来做线段检测,基本用法如下:
// create a pointer to an LSDDetector object
Ptr<LSDDetector> lsd = LSDDetector::createLSDDetector();
// compute lines
std::vector<KeyLine> keylines;
lsd->detect( imageMat, keylines, mask );
【matlab】:Contribute库
提供了一些工具,能够让opencv的算法生成为matlab的算法。需要在cmake的时候添加matlab的路径
cmake -DMATLAB_ROOT_DIR = <MATLAB_Path>
【ml】:官方库
提供了机器学习的多种方法:ANN(人工神经网络),MLP(多层感知器),boost(),EM(最大期望),
GBT(通用二叉查找树),kdtree(k-d树),knearest(k近邻),lr(逻辑回归),nbayes(朴素贝叶斯),rtrees(随机森林),svm(支持向量机)
- ANN(人工神经网络)
- MLP(多层感知器)
- boost()
- EM(最大期望)
- GBT(通用二叉查找树)
- knearest(k近邻)
- kdtree(k-d树)
- lr(逻辑回归)
- nbayes(朴素贝叶斯)
- rtrees(随机森林)
- svm(支持向量机)
【objdetect】:官方库
实现了一些目标的检测功能,比如边缘特性,线特性,中心点特性。有haar人脸检测,hog检测的例子
【optflow】:Contribute库
用于跟踪点的光流算法,实现了4中光流算法 farneback、simpleflow、tvl1 、 deepflow。实例中还有算法的评估
【photo】:官方库
计算摄影学,包括图像修补(inpaint),去噪,HDR成像,非真实性渲染(npr)等。
【python】:官方库
opencv的Python例程。
【reg】:Contribute库
多种映射操作:affine,shift,projec,gradshift,gradeuclid,gradsimilar,gradaffine,gradproj,pyramid,实例包括:
- Shift();
- Euclidean();
- Similarity();
- Affine();
- Projective();
【rgbd】:Contribute库
RGB深度处理模块
【saliency】:Contribute库
Saliency API,类似于人的焦距问题的相关算法,即人可以关注感兴趣的东西和无视旁边的东西。
现在实现的Saliency算法有:
- SPECTRAL_RESIDUAL
- BING
- BinWangApr2014
【shape】:官方库
可以计算外形的各种距离,比如EMD(class computeShapeDistance_EMD),SCD(class computeShapeDistance_Chi)
【stereo】:Contribute库
用不同的描述符体现立体相关性。
- Very fast SAD-based (Sum-of-Absolute-Diffrences) stereo correspondence algorithm.
【stitching】:官方库
图像的拼接的库,可用于制作全景图。warpers, seam_finders,blenders
【structured_light】:Contribute库
里面引入了点云的概念。
- capture_pattern:如何使用 *GrayCodePattern* 类来获得 gray_code_pattern 数据集。
- decode_pattern:解码之前的 gray_code_pattern 数据集获得点云。
【superres】:官方库
全称是Super Resolution ,用于增强图像的分辨率。快速并且具有鲁邦性的 *Duality Based TV-L1* 光流算法,应用superres类。
【surface_matching】:Contribute库
用来做3D视觉中,物体的匹配,特征描述符与匹配
【text】:Contribute库
包括了字母的检测与识别,主要是应用在真实场景中的字母检测,识别的部分用的是开源的OCR(open-source Tesseract OCR),所以如果想用这部分的程序,需要先安装open-source Tesseract OCR才可以。
【tracking】:Contribute库
长期的目标跟踪算法API。多种跟踪算法,比如MIL,BOOSTING,MedianFlow,TLD,KCF。
【ts】:官方库
用途未知。应该是不常用。
【video】:官方库
- 实现了用混合高斯模型做背景的剪出,*BackgroundSubtractorMOG2*类。使用方法:
//initial model
BackgroundSubtractorMOG2 bg_model;
//For each new image the model is updates using:
bg_model(img, fgmask);- 实现了基于KNN的背景剪出,(有阴影检测)*BackgroundSubtractorKNNImpl* 类。
- 摄像头偏移测量。MeanShift &CamShift
- 图像对齐算法 *ECC algorithm*
- 卡尔曼滤波(kalman)
- tv1光流
【videoio】:官方库
对视频编解码的一些函数。
【videostab】:官方库
全称是Video Stabilization ,用于解决相机移动拍摄时视频不够稳定的问题。
【viz】:官方库
三维可视化模块。可以认为这个模块实现了一个简单的三维可视化引擎,有各种UI控件和键盘、鼠标交互方式。底层实现基于VTK这个第三方库。
【xfeatures2d】:Contribute库
包含了2部分,实验性的2D图像特征算法和nonfree算法。
其中包括:brief,freak,lacth,lucid,sift,surf等算法
【ximgproc】:Contribute库
扩展的图像处理算法。其中包括:
- 结构森林 ( Structured Forests )
- 域转换滤波 ( Domain Transform Filter )
- 引导滤波器 ( Guided Filter )
- 自适应流形滤波器 ( Adaptive Manifold Filter )
- 双边缘滤波 ( Joint Bilateral Filter )
- 超像素 ( Superpixels )
【xobjdetect】:Contribute库
积分频道特征检测器框架。acffeature, icfdetector,waldboost
【xphoto】:第三方库
增加了一些照片的处理算法 。
- 颜色平衡 (Color balance)
- 去噪 (Denoising)
- 修补(Inpainting)
【最后附上一个第三方的说明】
1. **opencv_adas**: Advanced Driver Assistance Systems module with Forward Collision Warning.
2. **opencv_bgsegm**: Improved Adaptive Background Mixture Model for Real-time Tracking / Visual Tracking of Human Visitors under Variable-Lighting Conditions.
3. **opencv_bioinspired**: Biologically inspired vision models and derivated tools.
4. **opencv_ ccalib**: Custom Calibration Pattern for 3D reconstruction.
5. **opencv_cvv**: GUI for Interactive Visual Debugging of Computer Vision Programs.
6. **opencv_datasets**: Interface for interfacing with existing computer vision databases.
7. **opencv_datasettools**: Tools for working with different datasets.
8. **opencv_face**: Recently added face recognition software which is not yet stabalized.
9. **opencv_latentsvm**: Implementation of the LatentSVM detector algorithm.
10. **opencv_line_descriptor**: Binary descriptors for lines extracted from an image.
11. **opencv_matlab**: OpenCV Matlab Code Generator.
12. **opencv_optflow**: Optical Flow Algorithms for tracking points.
13. **opencv_reg**: Image Registration module.
14. **opencv_rgbd**: RGB-Depth Processing module.
15. **opencv_saliency**: Saliency API, understanding where humans focus given a scene.
16. **opencv_surface_matching**: Surface Matching Algorithm Through 3D Features.
17. **opencv_text**: Scene Text Detection and Recognition in Natural Scene Images.
18. **opencv_tracking**: Long-term optical tracking API.
19. **opencv_xfeatures2d**: Extra 2D Features Framework containing experimental and non-free 2D feature algorithms.
20. **opencv_ximgproc**: Extended Image Processing: Structured Forests / Domain Transform Filter / Guided Filter / Adaptive Manifold Filter / Joint Bilateral Filter / Superpixels.
21. **opencv_xobjdetect**: Integral Channel Features Detector Framework.
22. **opencv_xphoto**: Additional photo processing algorithms: Color balance / Denoising / Inpainting.
23. **opencv_stereo**: Stereo Correspondence done with different descriptors: Census / CS-Census / MCT / BRIEF / MV / RT.