终于来了!OpenCV更新了:4.11.0和5.0预览版

科技   2025-01-17 10:05   中国香港  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达
来源:OpenCV与AI深度学习

OpenCV 4.11.0 ChangeLog:

OpenCV 4.x 新年更新已发布。

  • 通用的:

    • 5.x 的内部 C API 清理和反向移植。

    • RISC-V/AArch64:禁用 CPU 功能检测#25901

    • 支持 C++20 标准#26590

    • 某些函数的 algoHint 参数可以实现更快的速度,但不是位精确的实现

  • 核心模块:

    • 为 FileStorage 添加了 int64 数据类型支持#26434

    • 修复 FileStorage 中无效属性值处理#25955

    • 扩展 LUT 以支持 FP16 #25787

    • 修复了使用 HAL 在 meanStdDev 中用零填充 stdDev 尾部的问题#25789

    • 设置并检查所有 cv::Mat 实例的分配器指针#25979

    • 提高了 Rect::contains 的准确性#26022

    • 修复了某些情况下使用 HAL 时 minMaxIdx 中的结果偏移问题#26080

    • 在通用内在函数后端用包装函数替换 C++ 运算符#26109

    • 扩展 cv::TickMeter #26212

    • 重写了 OpenCL-OpenGL-interop 设备发现例程,无需扩展,并支持 Apple #26281

    • 将 cv::Mat(Mat&&) 标记为 noexcept #25899

    • 多个 Eigen 库互操作改进#25751

  • Calib3d 模块:

    • 多个棋盘检测器改进#25427#25807#25991#26014

    • 在黑色瓷砖上使用中心/角落标记启用棋盘格检测#25808

    • 修复 projectPoints 中 Rodrigues CV_32F 和 CV_64F 类型不匹配问题#25824

    • 添加带有非恒等投影矩阵的鱼眼::扭曲#25943

    • SQPnP 求解器更新#26219

    • 修复了 USAC 中的矢量访问#26530

  • Imgproc 模块:

    • 添加了一个新函数,用于近似具有一定边数的凸包边界多边形#25607

    • 添加加权霍夫变换#21407

    • 修复轮廓近似中的错误#25672

    • 修复了 divSpectrums 中的错误#25738

    • 修复了 intersectConvexConvex_ 中非凸输入的结果缓冲区溢出#25725

    • 为 GaussianBlur 添加了标志,以实现更快但不精确的实现#25792

    • 向 cvtColor 添加了标志以实现更快但不精确的位实现#25932

    • 修复了 fillPoly 绘制超出边界的问题#26187

  • DNN 模块:

    • [GSoC] 块量化支持#25644

    • 更快地实现 blobFromImages 以实现 CPU nchw 输出#26127

    • 使用 RISC-V RVV #25883进行 DNN 优化。

    • 增加了 DepthToSpace 和 SpaceToDepth #25779

    • Yolo v10 支持和相关示例#25794

    • nary元素运算的并行实现#25630

    • 支持 Attention 层所需的 Unflatten 操作#25861

    • Erf 和 GELU 层优化#25147

    • 使用 v_exp 优化激活#25881

    • 修复了不同 OpenVINO 版本的编译错误#25987

    • 修复了 CuDNN 的 matmul 崩溃问题#26029

    • 修复了 CuDNN 9+ 的 CuDNN 运行时版本检查#25841

    • 添加 ONNX TopK #23279

    • 修复了 einsum 中的缓冲区分配(修复了 32 位平台上的随机崩溃)#26059

    • 为 TFLite #26132添加了 Leaky RELU 支持。

    • 切换到 Winograd 的运行时调度程序#26155

  • Objdetect 模块:

    • 当没有提供标记时,正确检查#25938

    • 修复 QR 解码器和编码器中无效的向量访问#26532

  • Highgui 模块:

    • 在 Framebuffer 上添加了新的 Highgui 后端#25661

    • 修复 Windows 上的 HWND_TOP 窗口处理#25836

    • [GSoC] 增加了对 GTK3 的 OpenGL 支持#25822

    • Linux 上修复了几个与 OpenGL 相关的问题#25865 , #22836

    • 修复 cvGetWindowRect_COCOA 中的泄漏#26625

  • Imgcodecs 模块:

    • [GSoC] 支持 WEBP、AVIF 和动画 PNG 的新动画 API #25608#25715

    • [GSoC] 为 imgcodecs 添加 GIF 解码和编码#25691

    • 增加了实验性的 JPEG XL (jxl) 编解码器支持#26379

    • imread 和 imdecode 中的初始 RGB 布局支持#25809

    • 修复某些情况下的 imread 输出类型#25703

    • 修复 HDR 解码器中的文件描述符泄漏#25838

    • 修复损坏的 JPEG 解码#25864

    • 改进了图像编解码器中的错误处理#25975

    • 修复 U8 的 Bayer2Gray SIMD #25968

    • 避免在 AVIF 中读取未初始化的值#26084

    • 实现 imencodemulti() #26211

    • 修复了与不同 OpenEXR 版本的兼容性#26478

  • 视频IO模块:

    • 为内存数据流添加了 VideoCapture 构造函数#25584

    • 修复 Android 原生视频编码中的错误#25716

    • 在 GStreamer 后端添加了 BGRA 流支持#25602

    • 更新了 Orbbec 相机支持材料#25813# 25845、25907

    • 修复了 cv::VideoWriter 与 FFmpeg 时间戳封装问题#25874

    • 修复 Dshow 后端的内存泄漏#26045

    • 修复 V4L NV12 颜色转换#26081

    • Android 原生相机功能增强#26627

    • AndroidMediaNdkCapture 像素格式增强#26656

    • 修复 VideoCapture 无法读取名称中带有数字的单个图像的问题#26637

    • 使用 FFmpeg 插件修复了 writer setProperty #26652

  • 视频模块:

    • 修复了当输入为黑色时裁剪尺寸不断增大直至内存不足的情况#25771

  • 特征2d:

    • 修复了 SIFT 中的越界访问问题#26148

  • G-API模块:

    • 修复了矢量化 G-API convertTo 实现中的输入缓冲区读取溢出#25780

    • 扩展 G-API onnx::Params 以传递任意会话选项#25791

    • 在 G-API ONNX 后端处理 I32/I64 数据类型#25817

    • G-API:为 ONNXRT 后端引入级别优化标志#26293

  • 优化:

    • 适用于 Qualcomm SoC 的新型基于 FastCV 的 HAL(-DWITH_FASTCV=ONCMake 选项)#26556#26617、26619、26621

    • 添加了自己的矢量化版本 v_exp #24941、v_log #25781、v_erf #25872、v_sin 和 v_cos #25892

    • 适用于 ARM 的 KleidiCV HAL 已更新为 KleidiCV 0.3 #26623

    • RISC-V RVV 1.0 和 RISC-V RVV 0.7.1 扩展的 HAL 的初始版本#26216#26624、26675

    • 在 Universal Intrinsic 的 RISC-V Vector (RVV) 后端中使用 LMUL=2。#26318

    • NDSRVP HAL 中适用于 RISC-V P 扩展的更多功能#25786#26088#26364

    • 内置 IPP 已更新至版本 2021.12。修复了新旧 Intel IPP 布局的构建问题#25773

  • 平台:

    • Android 上的 HWAsan 支持#25746

    • 针对不支持 FP16 的旧 GPU 进行多项 CUDA 修复#25880

    • 将 getStdAllocator() 添加到 cv::cuda::GpuMat #25978

    • 更新了 NPP 调用以使用新的 NppStreamContext API(如果可用)#26245

    • 更方便的 GpuMatND 构造函数#26472

    • 添加了运行时 GPU 检查以 haveCUDA #26164

    • 添加对 QNX 的支持#25832

  • OpenCV.js

    • 扩展 API 白名单并添加更多测试#26387

    • 按模块拆分白名单。增加了涵盖 opencv_contrib 模块的机会#25986

    • 修复 js 构建脚本中不正确的字符串格式#26374

    • Emscripten 构建修复了 SIMD 内在函数#26537

    • 为 USAC 支持添加了更多公共类型#26638

    • 重命名 Mat::clone 绑定,因为它在 Emscripten 中使用#26643

    • 修复 C 预处理器字符串化#26644

    • 修复枚举生成问题#26147

    • 多项测试改进#25732#25757#25961


OpenCV 5.0-alpha(预览版)

    新一代 OpenCV 的 alpha 版本。该版本旨在作为技术预览,尚未准备好用于生产。

以下符号用于标记以下各项:

  • 5+4.x:这个功能并不是很新,它已经放入最新的 4.x 中,但它足够重要,值得在这里提及。

  • 5.0:该项目将在 5.0 版本中完成;目前正在计划或正在进行中。

  • 5.x:该项目将以某种形式放入 5.0 版本中,但大部分将在后续的 5.x 版本中完成。

发布亮点

一般变更、改进

  • 5+4.x:最近的 OpenCV 4.x(自 OpenCV 4.5.0 起)以及 OpenCV 5.0 现在均采用 Apache 2 许可证发布。我们之前使用 BSD 许可证,但后来改用了 Apache 2,因为后者更加完善,并且能够更好地保护专利相关问题(虽然不是最理想的)。
  • OpenCV 现在要求最低 C++ 标准为 C++ 17。它默认使用 C++ 17 构建,但我们也计划使其与 C++ 20 和 C++ 23 兼容。
  • 删除了对 Python 2 的支持。OpenCV 现在需要 Python 3 (3.6+),并且我们仅构建 Python 3 绑定。

OpenCV 大清理

  • C API 已被删除。我们仍在使用一些CV_宏,例如CV_8U,但所有 C 函数(如cvCreateMat()cvFindContours())和结构(例如CvMat)已被删除。再见,老旧的 OpenCV 1.x API,RIP :)
  • OpenVX 支持已被删除。如果某些供应商提供 OpenVX 内核并希望将其用于 OpenCV 加速,他们可以为此创建自定义“非 CPU”HAL,见下文。
  • Graph APIG-API)模块已移至opencv_contrib
  • 经典ML模块已移至opencv_contrib。如果您使用 Python,scikit-learn是一个更好的选择。
  • Features2D模块已重命名为Features。重命名模块的范围已扩展到处理现代深度网络生成的特征向量。几个过时的特征检测器/描述符已移至 opencv_contrib。不过SIFTORBFASTGoodFeaturesToTrackMSER仍然可用。
  • 5.0:FLANN作为一个单独的模块将消失。已经添加到模块中的基于 Annoy 的 ANN(近似最近邻Features)搜索算法将取代它。
  • 清理objdetect模块:基于 Haar 和 HOG 的检测器已移至opencv_contrib模块xobjdetect。现代的基于深度学习的物体/人脸检测器速度更快、更准确。
  • Calib3d模块被分成 3 个模块:
    • 3d— 基本 3D 几何和 3D 视觉功能
    • calib— 相机校准
    • stereo— 通过立体对应估计深度图的算法。
  • 很多过时的样本(约 50% 的 C++ 样本和 5% 的 Python 样本)已被删除。剩余的很多样本都已修改。

更新核心模块

  • OpenCV 现在支持扩展的数据类型集:
    • uint8_t: CV_8U,,,,,,,,(又名或或):。int8_t: CV_8Suint16_t: CV_16Uint16_t: CV_16Sint32_t: CV_32Sfloat: CV_32Fdouble: CV_64Fhfloathalffloat16_t__fp16CV_16F
    • (OpenCV 5 中的新功能):(bfloat又名bfloat16_t):CV_16BF,,,,,。uint32_t: CV_32Uuint64_t: CV_64Uint64_t: CV_64Sbool: CV_Bool
    • booltype 每个值占用 1 个字节,而不是 1 位。任何非零字节都被视为true,零字节表示falsecv::Matof 类型bool (CV_Bool)现在可以用作我们之前使用cv::Matofuchar/uint8_t或 的所有函数的掩码schar/int8_t
    • hfloat和上的操作bfloat始终可用,即使在本身不支持这些类型的硬件上也是如此。如有必要,我们会在内部使用高效的内联函数进行标量和向量float<=>hfloat/bfloat转换。对新类型的支持已添加到cv::Matcv::UMat、 InputArray/OutputArray、 关键模块(核心、dnn、(5.x) imgproc 等)、FileStorage、各种编程语言绑定等。
  • OpenCV 现在支持低于 2 维的数组,即 1D(向量)和 0D(标量)。std::vector<T>包装成MatInputArray/OutputArray现在是真正的 1D 数组,而不是 2D Nx1 或 1xN 数组(如 OpenCV 4.x 中)。对于 1D 数组Mat::dims == Mat::rows == 1Mat::cols == Mat::total() == <number_of_elements>。对于 0D 数组Mat::dims == 0Mat::rows == Mat::cols == Mat::total() == 1。区分空矩阵和标量的安全方法是使用<some_mat>.empty(),它基本上等同于(但比 稍快)<some_mat>.total() == 0
  • Lapack 现在在 OpenCV 中始终可用。具体来说,它用于更高效的 SVD 和特征值/特征向量分解以及 USAC 框架。当系统中未安装外部 Lapack 库时,OpenCV 会构建并使用 Lapack 的内部小子集。
  • 5.0, 5.x:预计在 5.0 发布之前和之后进行进一步重构和改进:https ://github.com/opencv/opencv/issues/25011 。

更新了 Imgproc 模块

  • 加速图像变形函数:warpAffine、warpPerspective、remap。加速因子从 10% 到 300% 不等,具体取决于平台、图像大小、类型和操作标志。预计 5.0 gold 版本将对这些函数以及其他重要的图像处理函数进行更多优化。
  • 文本渲染现在使用基于 STB 的 truetype 引擎和嵌入的可变 truetype 字体。用户还可以加载和使用自定义字体。因此,现在支持许多 Unicode 符号,但有一些注意事项:
  1. 有些文字(例如阿拉伯语或梵文)无法正确呈现,因此我们需要添加 Harfbuzz
  2. 由于同样的原因,一些复合 Unicode 符号无法正确显示
  3. 不支持彩色表情符号,因为 STB 是一个简单的黑白引擎。
  • 5.0, 5.x:预计在 5.0 发布前后会进行进一步重构和改进:https://github.com/opencv/opencv/issues/25012
  • 更新的 HAL

    • 5+4.x:OpenCV HAL 中添加了许多新条目,允许各种供应商为 OpenCV 函数提供自定义加速。在 5.0 gold 中将添加更多新的 HAL 条目。
    • 5+4.x:在某些情况下,供应商提供了超快的实现,但不幸的是,这些实现并非 100% 兼容 OpenCV。为了让用户在某些关键位置选择速度和准确性,OpenCVAlgorithmHint hint为几个函数引入了可选参数,默认情况下设置为(除非用户使用 cmake 中的(选项)编译 OpenCV,否则ALGO_HINT_DEFAULT这相当于)。ALGO_HINT_ACCURATEALGO_HINT_DEFAULT=ALGO_HINT_FAST-DOPENCV_ALGO_HINT_DEFAULT=ALGO_HINT_APPROX
    • 5+4.x :添加了数学函数的通用内在函数(v_exp、、、) ,以加速深度学习推理、图像处理和其他算法。v_logv_erfv_sincos
    • FP16(即半精度)通用内在函数已添加到 ARMv8 NEON 和 RISC-V RVV 后端。在这两种情况下,FP16 SIMD 算法默认不可用,需要使用特殊选项构建代码。OpenCV 的相应部分使用我们的运行时调度机制,该机制根据实际客户端硬件选择最适合的内核类型。
    • 5.0、5.x:UMat 将扩展为能够存储任何 CPU 或非 CPU 数组/张量。也就是说,从仅限 OpenCL 的解决方案 (T-API),我们现在迁移到通用异构 API(我们可能称之为 U-API 或“非 CPU HAL”),UMat 将成为它的主要数据容器。预计还会有许多其他改进:https://github.com/opencv/opencv/issues/25019、https : //github.com/opencv/opencv/issues/25025

    更新的 DNN(深度学习推理模块)

    • 新引擎现已推出,现在与旧引擎共存。新引擎为动态形状和其他现代 ONNX 功能提供了更好的支持。到 5.0 gold 版本,它还将提供比旧引擎更好的 ONNX 规范覆盖范围;现在覆盖范围是可比的。
    • 添加了参数int engine = ENGINE_AUTOcv::dnn::readNet()控制使用哪个引擎来加载和进一步运行模型。默认情况下,我们首先尝试新引擎,如果无法加载模型,则返回旧引擎。我们还可以强制使用新引擎或旧引擎。由于内部表示不同,加载模型后无法切换引擎。
    • ONNX、Caffe、TF 和 TFLite 格式的解析器已更新,以支持引擎选择。
    • 5.0, 5.x: 目前,新引擎仅支持默认后端和 CPU 目标。计划在 5.0 gold 中启用更多后端和目标,并在后续的 5.x 版本中启用更多后端#26198

    更新了 3D/Calib

    • 5+4.x:效率显著提高的 USAC 框架(尤其是在噪声数据集的情况下)现在用于基于 RANSAC 的算法来估计单应性、本质矩阵、解决 PnP 问题等。请参阅https://docs.opencv.org/5.x/de/d3e/tutorial_usac.html
    • 新的 Levenberg–Marquardt 算法实现。它更快、更准确。
    • 高效的多相机校准框架已添加到校准模块。它包括智能初始化和基于 USAC 的优化管道,用于计算所有同时校准的相机相对于第一台相机的相对位置。支持各种相机配置(所有针孔相机、所有鱼眼相机和混合情况)。有关更多详细信息,请参阅教程。
    • 发起基本网格处理和点云处理算法的研究:TSDF、ICP等。
    • 添加了一些流行点云格式的导入器和导出器,例如.ply 和.obj。

    修改示例

    • 修订了以下深度学习示例:分类、分割、对象检测、边缘检测、跟踪、人物识别。所有示例都使用了一组模型,可以方便地通过 进行下载cd <opencv>/samples/dnn && python3 download_models.py
    • 添加了 LLM(GPT2)和扩散(LDM)模型的实验样本。

    迁移至 4.x

    待定


    相关链接:

    https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4110https://github.com/opencv/opencvhttps://github.com/opencv/opencv/tree/5.x

    下载1:OpenCV-Contrib扩展模块中文版教程
    在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

    下载2:Python视觉实战项目52讲
    小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

    下载3:OpenCV实战项目20讲
    小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

    交流群


    欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


    小白学视觉
    哈工大在读博士的公众号,《OpenCV 4快速入门》的作者,面向初学者介绍计算机视觉基础知识、OpenCV使用、SLAM技术,深度学习等内容。
     最新文章