OpenCV2.2的改动(转载)

来源:互联网 发布:乐动力微信数据来源 编辑:程序博客网 时间:2024/05/21 09:29

 

总体修改和改进:

1)重新组织库结构,用更小的模块来取代cxcore, cv, cvaux, highgui和ml库

opencv_core - core核心函数库(基本的结构,架构和线性代数,DFT,xml和yam i/o接口函数等)

opencv_imgproc -图像处理函数库(滤波,高斯模糊,形态学膨胀/腐蚀,线性缩放图像大小,图像几何变化,颜色结构变化,计算直方图等)

opencv_highgui - GUI,图像和视频接口函数库

opencv_ml -统计机器学习模型函数库(SVM,决策树,级联等)

opencv_features2d -二维特征检测器和描述子函数库(SURF,FAST等,包括一种新的特征描述子匹配结构,opencv2.3中添加了ORB 匹配方法)

opencv_video -动态分析和物体追踪函数库(光流法,移动模板,背景消除)

opencv_objdetect -图像目标检测函数库(haar小波& LBP人脸检测和识别,HOG人检测等)

opencv_calib3d -摄像头标定,视觉匹配和三维数据处理函数库

opencv_flann -近似最近领域搜索库和OpenCV封装

opencv_contrib -最新贡献但不是很成熟的函数库

opencv_legacy -过时代码,为了后续代码兼容性而存在

opencv_gpu -用CUDA来加速一些openCV函数的类库(相对不太稳定,但对openCV开发非常有帮助)

如果你用CMake或者pkg-config来进行配置openCV,如果没有任何改动,你的源码编译会正常。否则,你需要修改连接参数(修改库名)和更新头文件路径。

仍然支持使用#include <cv.h>等,但是推荐修改为#include “opencv2/imgproc/imgproc.hpp”。

请查看新的c和c++例子文件,你会发现,这样样例的头文件都采用了新的引用格式。如:https://code.ros.org/svn/opencv/trunk/opencv/samples/c/blobtrack_sample.cpp(这是我自己加的,原文没有,便于大家查看)

2)新格式的分装器覆盖了更多的opencv2.x API,文档和例子将在后面加上。为了采用额外的函数库,你需要numpy

SWIG-不在包含Python封装器

3)OpenCV现在支持Android开发(GSoC 2010工程),一些样例可以在http://opencv.willowgarage.com/wiki/Android找到

4)全新的opencv_gpu加速器模块由NVidida开发支持,详细请看下面。

新的函数,特征集

1)core:

cv::Matx<T, m, n>可用于定义给定类型,给定大小矩阵。Vec<T, n>由Matx<T, n, 1>产生,此类可被用于小矩阵的构建,而cv::Mat用于大矩阵。用于转换两者的函数也由OpenCV提供。

cv::Mat与cv::MatND现在属于同一类型: typedef cv::Mat cv::MatND.考虑到很多函数没有检查矩阵维数,在用openCV处理3维,4维等高维矩阵时要小心。

实验支持Eigen 2.x/3.x特征(在Cmake参数选择WITH_EIGEN2).同时,可以实现Eigen2 matrices和cv::Mat相互转换。详情查看modules/core/include/opencv2/core/eigen.hpp.(这似乎是说矩阵特征值方面的事情)

cv::Mat支持"<<"操作。详情查看 opencv/samples/cpp/cout_mat.cpp.

cv::exp,cv::log由于SSE2的优化,速度更快

2)imgproc:

颜色转换函数被重写;RGB->Lab & RGB->Luv得到明显改善。函数假设sRGB输入颜色空间(比如,gamma=2.2),如果你想要原始线性RGB->L**转换,采用CV_LBGR2LAB

VNG算法被加入用以实现Bayer->RGB。虽然比简单插值算法慢了很多,但是它能提供细节更清晰的图像

对8位图增加了RGB->HSV/HLS转换函数,这里H通道采用完整的0..255区域,而不是原来的0..179区域。转换代码为CV_RGB2HSV_FULL

为多角度摄像头函数initWideAngleProjMap()增添了专用变量initUndistortRectifyMap:

3)features2d:

引入关键点检测,计算描述子和匹配的统一架构。先前的和新的检测和描述方法,比如SURF,Fast,StarDetector等,被封装在这个架构中。这个架构的关键的特点(除了为不同检测子和描述子提供统一的API)是它为图像匹配和基于纹理的物体检测提供了工具,详情请看http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html

C++样例:


descriptor_extractor_matcher.cpp –采用关键点和描述子从场景中查找物体
generic_descriptor_matcher.cpp –在物体上采用变动,可以使描述子计算不必太精确。
bagofwords_classification.cpp –一个用这种架构处理VOC下载的数据的例子,VOC数据集: http://pascallin.ecs.soton.ac.uk/challenges/VOC/

Ethan Rublee集成了由Michael Calonder提出的最新更快的关键点描述子BRIEF。例子请查看opencv/samples/cpp/video_homography.cpp

SURF关键点检测子采用TBB(此模块由imahon和yvo2m开发)进行并行计算

3)objdetect:

LatentSVM目标检测法,应用于P. Felzenszwalb的算法,由Nizhniy Novgorod State University (NNSU) team开发.详情请查看opencv/samples/c/latentsvmdetect.cpp

4)calib3d:一种新的合理的标定模型:

x' = x*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <tangential_distortion for x>,

y' = y*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <tangential_distortion for y>

被引入。对广角镜头的摄像头标定很有用,因为需要优化的参数增加了,所以你需要提供更多的数据用于可靠的估计它们。

或者可以简单的初始化畸变向量为0,并且传递CV_CALIB_RATIONAL_MODELto enable the new model + CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5或者其他组合去选择去增加或者取消参数。

增加校正三目摄像头(三目在同一水平线上),详情请查看samples/cpp/3calibration.cpp

5)ml:

引入由NNSU工作组开发的梯度级联树模型

6)highgui:

增加支持Qt后台开发,源于由Yannick Verdie完成的GSoC 2010工程。后台开发有一些新特征没有体现,如采用TTF字体的文字翻译,独立的控制面板,包括滚动条,按钮,单选按钮,复选按钮,大小变化,图像显示区,highgui窗体, "保存"等等。详情请看Yannick在youtube视频演示新特征:http://www.youtube.com/user/MrFrenchCookie#p/u

新的API被引入:http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html,如果你机器上有Qt SDK (或者libqt4开发包),可以采用新的API,并且采用QT编译OpenCV (pass-DWITH_QT=ONto CMake;注意结果,确认Qt为GUI后台编译)

支持16位和LZW-压缩TIFFs

支持Linux环境下IEEE1394模式的摄像头

7) contrib:增加Marius Muja,Antonella Cascitelli,Marco Di Stefano,Stefano Fabri开发的斜面匹配算法.详情查看samples/cpp/chamfer.cpp

8) gpu:这一部分是OpenCV的全新部分,由NVidia开发并支持。注意,此开发包处于测试阶段,所以在开发时请注意和关注OpenCV SVN的更新。

在采用gpu,需要安装最新的NVidia CUDA SDK,并且采用CUDA编译OpenCV (-DWITH_CUDA=ONCMake flag).所有函数采用cv::gpu namespace命名空间。完整的函数和类在opencv/modules/gpu/include/opencv2/gpu/gpu.hpp,下面是API中一些主要组成部分:


图像计算,滤波操作,形态学,几何变换,直方图
计算立体视觉匹配算法:块匹配,Belief Propagation和Constant-Space Belief Propagation.
基于HOG物体检查子。It runs more than order of magnitude faster than the CPU version!See opencv/samples/gpu

9) python bindings:大量OpenCV 2.x函数被转换为Python语言。

这些新的分装需要安装numpy (请查看http://opencv.willowgarage.com/wiki/InstallGuide).

同理,C++ API,在python环境下,不需要定位输出数组,他们会自动由相互函数创建,下面是一个小例子:

§       import cv§  §       a=cv.imread("lena.jpg",0)§       b=cv.canny(a, 50, 100, apertureSize=3)§       cv.imshow("test",b)§       cv.waitKey(0)

在例子中,a和b是普通numpy数组,所以OpenCV函数完全支持numpy和scipy

文档与例子 

每一个函数都被添加了指向wiki页面的链接, 详见 http://opencv.willowgarage.com

所有的例子都提供了使用提示,例如当用户没有提供足够的输入参数时,会显示一个How to的提示信息。

大多数例子都已经使用新的C++风格的OpenCV API。

Bug 修正

大约300个bug被修正。大多数的帖子列在https://code.ros.org/trac/opencv/report/6.

旧的bug跟踪链接 https://sourceforge.net/projects/opencvlibrary/现在关闭用以更新数据。当所有现在还存在的bug被移动到code.ros.org,这个旧的bug跟踪就会被完全删除。所以需要大家使用新的bug跟踪链接。

已知的问题与限制

Winows上的安装版本还是32位的,不提供多线程TBB支持。你可以从OpenCV的更新网站上下载源代码用CMake建立64位版本。

一个其他已知Bug的列表可以在如下链接找到http://code.ros.org/trac/opencv/report/1.

原创粉丝点击