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