引言
OpenCV(开源计算机视觉库)作为计算机视觉领域最受欢迎的开源库之一,在2025年7月发布了4.12.0版本。这个夏季更新带来了大量性能优化、新功能和错误修复,覆盖了核心模块、图像处理、3D校准、深度学习等多个领域。本文将详细介绍OpenCV 4.12.0的主要更新内容,帮助开发者了解新特性并充分利用这些改进。
核心模块(Core Module)改进
OpenCV 4.12.0在核心模块进行了多项重要改进:
1.用户自定义日志回调:新增了用户定义日志回调功能,开发者现在可以更灵活地处理OpenCV的日志输出,便于集成到现有日志系统中。
2.矩阵操作增强:
• 新增
reinterpret()方法到cv::Mat,提供更灵活的矩阵数据解释方式• 修复了空ND数组构造问题
• 改进了大图像
cv::meanStdDev计算的溢出问题
3.性能优化:
• 在
cv::mean函数中使用HAL加速• 向量化实现
cv::normalize和cv::norm函数• 改进了
exp和sqrt函数的SIMD_SCALABLE支持• 使用通用内联函数重构并扩展了
normDiff功能• 进一步向量化了带掩码的
copyTo操作
4.其他改进:
• 修复了POWN的OpenCL实现
• 在单独的头文件中恢复了传统的通用内联函数操作符
• 提高了三次方程求解的精度
• 弃用了
cv::UMat从std::vector构造时的copyData参数,现在总是复制数据
图像处理模块在4.12.0版本中获得了显著改进:
1.轮廓查找优化:
• 优化了
cv::findContours的内存消耗• 提高了大图像处理的稳定性
2.几何变换改进:
• 修复了图像变形中潜在的整数溢出问题
• 提高了椭圆拟合的鲁棒性
• 修复了奇异情况下的
cv::getPerspectiveTransform
3.新功能:
• 新增
cv::THRESH_DRYRUN标志,可在不实际阈值化的情况下获取自适应阈值• 为
cv::threshold添加了可选掩码参数• 新增
cv::getClosestEllipsePoints函数,用于获取椭圆上最近的点• 添加了钻石形结构元素支持形态学操作
4.性能提升:
• 使用通用内联函数优化了bayer2Gray转换
• 当使用
cv::WARP_INVERSE_MAP时,通过多线程加速了cv::remap计算• 提高了中值滤波的性能
3D校准模块在4.12.0版本中也有多项改进:
1.PnP求解改进:
• 修复了单应性估计中的内点更新问题
• 为鱼眼相机模型添加了
cv::solvePnPRansac实现• 优化了鱼眼相机模型的点去畸变操作
2.棋盘格检测改进:
• 修复了
cv::findChessboardCornersSBWithMeta与cv::CALIB_CB_LARGER标志一起使用时的标记排序问题• 修复了
FilterSpecklesImpl中的逻辑错误
3.可视化增强:
• 当投影轴超出相机帧时,
cv::drawAxes函数现在会发出警告• 添加了图像尺寸检查以避免StereoSGBM的非确定性行为
深度学习模块在4.12.0版本中获得了多项新功能和改进:
1.TFLite支持增强:
• 添加了TFLite StridedSlice支持(无步长仅切片)
• 为TF导入器启用了步长支持
• 添加了SUB、SQRT、DIV、NEG、SQUARED_DIFFERENCE、SUM等新操作的支持
• 修复了TFLite解析器中标量和1D张量的支持
• 减少了TFLite解析器中NHWC<->NCHW转换的次数
2.新后端支持:
• 添加了OpenVINO NPU支持
• 为CANN后端添加了更多操作支持
3.其他改进:
• 在
Net::Impl::getLatestLayerPin中添加了获取最新pin前的检查• 添加了多输出节点(如Split)情况下conv+eltwise的融合处理
对象检测模块在4.12.0版本中也有多项改进:
1.ArUco检测增强:
• 扩展了ArUcoDetector以高效运行多个字典
• 修复了旋转ArUco标记板生成问题
• 修复了图像边缘附近ArUco标记的错误检测
2.QR码改进:
• 修复了QR编解码器中的无效向量访问
• 修复了自动版本QR码编码器
• 添加了QR码ECI编码支持
• 使ChAruco板一致性检查变为可选
图像编码模块在4.12.0版本中获得了大量新功能和改进:
1.动画支持:
• 添加了内存中动画编码和解码支持
• 为Animated PNG添加了隐藏帧支持
• 添加了GIF解码和编码支持
• 添加了动画WebP支持
2.格式支持增强:
• 扩展了图像I/O API以支持元数据
• 添加了GDAL多通道支持
• 修复了Windows上的AVIF链接问题
3.PNG处理改进:
• 显著改进了PNG和Animated PNG文件处理
• 添加了多个libspng集成修复
• 修复了使用libspng后端时16位PNG的
cv::imread()实现
4.JpegXL支持:
• 修复了JpegXL解码器中的内存泄漏
• 为JpegXL实现添加了
cv::IMREAD_UNCHANGED和其他ImreadFlags支持• 实现了JpegXL的
imdecode()以直接从内存读取• 添加了JpegXL无损压缩支持
1.视频处理改进:
• 添加了带有预加载DNN模型的跟踪器工厂
2.相机支持增强:
• 修复了使用环境变量提供的自定义FFmpeg选项处理问题
• 修复了
cv::CAP_PROP_ORIENTATION_AUTO的默认行为• 当提供自定义选项时,提高了使用DShow后端时的相机打开性能
• 在Android原生相机捕捉中添加了缩放支持
• 修复了非BGR输出的V4L帧大小问题
• 添加了Orbbec Gemini 330相机支持
• 修复了写入无色图像时的
cv::VideoWriter失败问题• 修复了Android的setCameraIndex问题
硬件抽象层在4.12.0版本中获得了显著增强:
1.架构支持扩展:
• 将HAL实现提取为专用文件夹
• 为RISC-V RVV 1.0平台实现了新HAL
• 重构了OpenVX实现为HAL
• 部分将Intel IPP集成重构为HAL
2.平台特定优化:
• 更新了ARM的KleidiCV HAL到0.5版本
• 扩展了Qualcomm平台的FastCV HAL
• 添加了多个新HAL入口点,包括
cv::sum、带掩码的copyTo、cv::DFT和cv::DCT变体等
1.Python/Java/JS绑定:
• 添加了头文件解析器的条件包含支持
• 更新了predefined_types.py
• 为动画添加了绑定
• 修复了
cv::imread的Python类型提示错误• 扩展了DNN和Features2d的Java绑定生成
• 修复了JS包装器中
std::vector的处理• 在Java中添加了
cv::VideoCapture缓冲流构造函数
2.平台支持增强:
• 修复了Linux上的OpenBLAS检测
• 修复了与CMake 4的兼容性
• 修复了带Vulkan支持的Android构建
• 修复了VSX内联函数(Power)实现
• 添加了对POWER架构的getauxval和elf_aux_info的CMake检查
• 修复了openBSD构建
• 添加了对Nvidia Blackwell GPU架构的初步CUDA支持
• 修复了QNX 7.0的构建问题
• 切换到静态链接的FastCV并修复了Android上的构建问题
• 当CUDA Toolkit >=12.8时,强制CUDA目标使用C++17标准
• 修复了Windows ARM64EC构建
• 修复了Cygwin环境下的文件系统支持
OpenCV 4.12.0夏季更新带来了大量性能优化、新功能和错误修复,覆盖了计算机视觉处理的各个方面。从核心矩阵操作的改进到深度学习模块的增强,再到各种图像格式的支持扩展,这个版本为开发者提供了更强大、更高效的工具集。特别是对新兴硬件平台(如RISC-V)的支持和对动画格式的增强处理,使得OpenCV在现代计算机视觉应用中的适用性更加广泛。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,让AI助力您的未来发展。
热门跟贴