点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达 来源: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
ofuchar/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<T>
包装成Mat
或InputArray/OutputArray
现在是真正的 1D 数组,而不是 2D Nx1 或 1xN 数组(如 OpenCV 4.x 中)。对于 1D 数组Mat::dims == Mat::rows == 1
,Mat::cols == Mat::total() == <number_of_elements>
。对于 0D 数组Mat::dims == 0
,Mat::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 符号,但有一些注意事项:
有些文字(例如阿拉伯语或梵文)无法正确呈现,因此我们需要添加 Harfbuzz 由于同样的原因,一些复合 Unicode 符号无法正确显示 不支持彩色表情符号,因为 STB 是一个简单的黑白引擎。
更新的 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
ALGO_HINT_DEFAULT=ALGO_HINT_FAST
-DOPENCV_ALGO_HINT_DEFAULT=ALGO_HINT_APPROX
5+4.x :添加了数学函数的通用内在函数( v_exp
、、、) ,以加速深度学习推理、图像处理和其他算法。v_log
v_erf
v_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_AUTO
来cv::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#version4110
https://github.com/opencv/opencv
https://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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~