专栏名称: 小白学视觉
本公众号主要介绍机器视觉基础知识和新闻,以及在学习机器视觉时遇到的各种纠结和坑的心路历程。
目录
相关文章推荐
广东公共DV现场  ·  太恐怖!男子一个小动作夹断手指,“元凶”竟是 ... ·  16 小时前  
黄埔观察  ·  黄埔再造一个硅谷,重新定义CBD ·  3 天前  
51好读  ›  专栏  ›  小白学视觉

终于来了!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=ON CMake 选项) #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 API G-API )模块已移至 opencv_contrib
  • 经典 ML 模块已移至 opencv_contrib 。如果您使用 Python, scikit-learn 是一个更好的选择。
  • Features2D 模块已重命名为 Features 。重命名模块的范围已扩展到处理现代深度网络生成的特征向量。几个过时的特征检测器/描述符已移至 opencv_contrib。不过 SIFT ORB FAST GoodFeaturesToTrack MSER 仍然可用。
  • 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_8S uint16_t: CV_16U int16_t: CV_16S int32_t: CV_32S float: CV_32F double: CV_64F hfloat half float16_t __fp16 CV_16F
    • (OpenCV 5 中的新功能):( bfloat 又名 bfloat16_t ): CV_16BF ,,,,,。 uint32_t: CV_32U uint64_t: CV_64U int64_t: CV_64S bool: CV_Bool
    • bool type 每个值占用 1 个字节,而不是 1 位。任何非零字节都被视为 true ,零字节表示 false cv::Mat of 类型 bool (CV_Bool) 现在可以用作我们之前使用 cv::Mat of uchar/uint8_t 或 的所有函数的掩码 schar/int8_t
    • hfloat 和上的操作 bfloat 始终可用,即使在本身不支持这些类型的硬件上也是如此。如有必要,我们会在内部使用高效的内联函数进行标量和向量 float<=>hfloat/bfloat 转换。对新类型的支持已添加到 cv::Mat cv::UMat InputArray/OutputArray 、 关键模块(核心、dnn、(5.x) imgproc 等)、 FileStorage 、各种编程语言绑定等。
  • OpenCV 现在支持低于 2 维的数组,即 1D(向量)和 0D(标量)。 std::vector 包装成 Mat InputArray/OutputArray 现在是真正的 1D 数组,而不是 2D Nx1 或 1xN 数组(如 OpenCV 4.x 中)。对于 1D 数组 Mat::dims == Mat::rows == 1 Mat::cols == Mat::total() == 。对于 0D 数组 Mat::dims == 0 Mat::rows == Mat::cols == Mat::total() == 1 。区分空矩阵和标量的安全方法是使用 .empty() ,它基本上等同于(但比 稍快) .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。为了让用户在某些关键位置选择速度和准确性,OpenCV AlgorithmHint hint 为几个函数引入了可选参数,默认情况下设置为(除非用户使用 cmake 中的(选项)编译 OpenCV,否则 ALGO_HINT_DEFAULT 这相当于)。 ALGO_HINT_ACCURATE






    请到「今天看啥」查看全文