OpenCV4.0更新了什么

wen python案例 1

本文目录导读:

OpenCV4.0更新了什么

  1. 核心架构与 C++ 标准:转向 C++11
  2. 核心模块 (core) 的优化与改进
  3. 图像处理 (imgproc) 模块的重大变化
  4. 深度神经网络模块 (dnn) 的彻底重写
  5. 视频分析 (video) 模块
  6. 其他模块更新
  7. 对新硬件的支持
  8. 架构与模块调整
  9. 总结:开发者迁移时需要注意什么?

OpenCV 4.0 是计算机视觉库的一个重大版本更新,发布于 2018 年 11 月,相比于 3.x 系列,它在核心架构、功能模块、算法性能和硬件支持方面都有显著变化。

核心亮点和主要更新内容如下:

核心架构与 C++ 标准:转向 C++11

  • 最低要求 C++11:OpenCV 4.0 放弃了 C++98 标准,要求编译器支持 C++11,这使得代码可以利用现代 C++ 特性,如 auto、移动语义、std::shared_ptr 等,代码更简洁、性能更优。
  • 去除 C 语言 API:大量旧式的 C 语言风格 API(如 cv:: 前缀下的 CvMatIplImage)大部分被移除或标记为弃用,推荐全面使用 C++ 接口(如 cv::Mat)。

核心模块 (core) 的优化与改进

  • 性能提升:对矩阵运算、数据结构和内存管理进行了深度优化,特别是在 ARM 和 x86 架构上利用 SIMD(单指令多数据流)指令集。
  • cv::Mat 改进Mat 对象的内存管理更高效,支持移动语义。
  • OutputArray/InputArray 简化:这些用于函数参数传递的“代理”类在内部处理上更直接。
  • SizePoint 类改进:增加了更方便的构造函数和运算符。

图像处理 (imgproc) 模块的重大变化

  • cv::Canny() 更新:新的实现基于更高效的算法,性能更好,且不再需要 L2gradient 参数(默认为 L2 范数)。
  • cv::resize() 新插值方法
    • INTER_AREA 改进了下采样质量。
    • 新增了 INTER_LINEAR_EXACT(精确线性插值)和 WARP_POLAR_LOG/WARP_POLAR_LINEAR(用于极坐标变换)。
  • cv::blur()cv::GaussianBlur():内部实现性能优化,尤其是在多线程下。

深度神经网络模块 (dnn) 的彻底重写

这是最重要、最受关注的更新之一,OpenCV 4.0 的 dnn 模块从底层进行了重组。

  • 新增 ONNX 支持支持 ONNX 格式,这意味着可以直接加载由 PyTorch、TensorFlow、Caffe2、MXNet 等导出为 ONNX 格式的模型。
  • 改进的层支持:支持了更多常见的深度学习层(如 BatchNormReLU6SwishMish 等)。
  • 性能提升:推理速度显著加快,支持 VGG、ResNet、MobileNet、YOLO、SSD、OpenPose 等主流网络。
  • 简化 APIcv::dnn::Net 类的使用更直观。

视频分析 (video) 模块

  • 跟踪器大更新
    • 移除了旧版低效的跟踪器(如 MILBOOSTINGTLDMEDIANFLOW)。
    • 保留了 CSRT(Discriminative Correlation Filter with Channel and Spatial Reliability,通道和空间可靠性判别相关滤波)、KCF(Kernelized Correlation Filters,核相关滤波)、MOSSE(Minimum Output Sum of Squared Error,最小输出均方误差) 等。
  • 光流算法calcOpticalFlowFarnebackcalcOpticalFlowPyrLK 性能优化。

其他模块更新

  • 图像特征 (features2d):AKAZE、ORB、BRISK 等特征检测器性能提升。
  • 3D 视觉 (calib3d)calibrateCamera()findChessboardCorners() 等标定函数改进,支持更多棋盘格模式。
  • 机器学习 (ml):决策树、随机森林、SVM 等模型训练效率优化。
  • 图像拼接 (stitching):拼接质量改进,尤其是对于多视角和大图像。

对新硬件的支持

  • Intel Inference Engine:优化了对 Intel 的 CPU、GPU、VPU(如 Movidius)的推理支持。
  • Vulkan(可选):开始支持 Vulkan 作为后端,用于 GPU 加速某些操作(当时仍处于实验阶段)。
  • CUDAopencv_contrib 模块中的 CUDA 支持得到改进。

架构与模块调整

  • 部分模块移入 opencv_contrib:一些非核心或尚不稳定的模块(如 xfeatures2dtextaruco 等)被移到了额外的 opencv_contrib 仓库中,需要单独编译安装。
  • 模块命名简化:一些模块的命名空间或内部类名更规范。

开发者迁移时需要注意什么?

如果你是从 OpenCV 3.x 升级到 4.0:

  1. 必须使用 C++11 编译器(VS 2015+、GCC 4.8+、Clang 3.3+)。
  2. 检查 C 风格 API:移除所有 IplImageCvMat 相关代码,全面使用 cv::Mat
  3. 更新 dnn 代码:如果使用旧版 dnn 加载模型(如 Caffe 的 .prototxt/.caffemodel),代码通常可以兼容,但推理代码(forward() 调用)可能需要调整。
  4. 模块路径变化:如果使用了 xfeatures2d(SIFT、SURF),需要从 opencv_contrib 中单独编译。
  5. 检查旧 API 弃用警告:编译时打开 -Wdeprecated 可见弃用警告。

OpenCV 4.0 是一次面向现代 C++ 和深度学习时代的重大升级,性能更强、API 更现代、对神经网络的支持更全面。

抱歉,评论功能暂时关闭!