OpenCV2.2的新特性 转

总体修改和改进:

  • 重新组织库结构,用较详细,更小的模块来取代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 等,包括一种新的特征描述子匹配结构)
    • 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(这是我自己加的,原文没有,便于大家查看)

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

SWIG-不在包含Python分装器

  • OpenCV现在支持Android开发(GSoC 2010 工程),一些样例可以在http://opencv.willowgarage.com/wiki/Android 找到
  • 完整全新的opencv_gpu加速器模块由NVidida开发支持,详细请看下面。

新的函数,特征集

  • core:
    • cv::Matx<T, m, n> 可以增加给定类型,给定大小矩阵

Vec<T, n> 由 Matx<T, n, 1>派生,此类可被用于cv::Mat开销过大时的小矩阵。此操作子可实现Matx 和 Mat相互转换。

    • cv::Mat ,cv::MatND 是同一类型: typedef cv::Mat cv::MatND. 考虑到很多函数没有检查矩阵维数,在用openCV处理3维,4维等高维矩阵时要小心。
    • 实验支持支持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的优化,速度更快
  • 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等。
      • initUndistortRectifyMap为多角度摄像头增添了专用变量: initWideAngleProjMap()
  • features2d:

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开发)进行并行计算
  • objdetect:
    • LatentSVM 物体检查子,应用于P. Felzenszwalb的算法,由Nizhniy Novgorod State University (NNSU) team开发.详情请查看opencv/samples/c/latentsvmdetect.cpp
  • 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_MODEL +CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5 或者其他连接去选择去增强或者取消一些系数

    • 增加校正三目摄像头(三目在同一水平线上),详情请查看 samples/cpp/3calibration.cpp
  • ml:
    • 引入由NNSU工作组开发的梯度级联树模型
  • 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=ON to CMake; 注意结果,确认Qt为GUI后台编译)
    • 支持16位和LZW-压缩TIFFs
    • 支持Linux环境下IEEE1394 模式的摄像头
  • contrib:
    • 增加Marius Muja,Antonella Cascitelli, Marco Di Stefano ,Stefano Fabri开发的斜面匹配算法. 详情查看 samples/cpp/chamfer.cpp
  • gpu:
    • 这一部分是OpenCV的全新部分,由NVidia开发并支持。注意,此开发包处于测试阶段,所以在开发时请注意和关注OpenCV SVN 的更新。

在采用gpu,需要安装最新的 NVidia CUDA SDK ,并且采用CUDA 编译OpenCV (-DWITH_CUDA=ON CMake 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
  • python bindings:
    • 大量 OpenCV 2.x 函数被转换为Python 语言。

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

下面是测试python环境下使用OpenCV提供的Canny方法:

import cv

a = cv.LoadImageM('F:/removed_haze.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)

b = cv.LoadImageM('F:/removed_haze.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)

cv.Canny(a, b, 50, 100)

cv.ShowImage('test', b)

cv.WaitKey(0)

你可能感兴趣的:(opencv)