点击上方
“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达![](http://mmbiz.qpic.cn/mmbiz_jpg/ow6przZuPIENb0m5iawutIf90N2Ub3dcPuP2KXHJvaR1Fv2FnicTuOy3KcHuIEJbd9lUyOibeXqW8tEhoJGL98qOw/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp)
OpenCV 4.11.0 ChangeLog:
OpenCV 4.x 新年更新已发布。
-
通用的:
-
核心模块:
-
为 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 模块:
-
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
-
视频模块:
-
特征2d:
-
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
。现代的基于深度学习的物体/人脸检测器速度更快、更准确。
-
-
很多过时的样本(约 50% 的 C++ 样本和 5% 的 Python 样本)已被删除。剩余的很多样本都已修改。
更新核心模块
-
-
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 符号,但有一些注意事项:
-
有些文字(例如阿拉伯语或梵文)无法正确呈现,因此我们需要添加 Harfbuzz
-
由于同样的原因,一些复合 Unicode 符号无法正确显示
-
不支持彩色表情符号,因为 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