import cv2 as cvnet = cv.dnn.readNetFromONNX("lama.onnx")blob = cv.dnn.blobFromImages([img, mask], scalefactor=1/255.)net.setInput(blob)out = net.forward() # inpainted imag
这类能力说明OpenCV 5的DNN模块已经覆盖到更广的现代视觉任务,不再只是传统意义上的分类、检测和分割。
特征匹配也进入深度学习时代
特征检测和匹配是OpenCV最经典的任务之一。图像拼接、图像对齐、三维重建,很多系统都从SIFT、ORB、FAST这些传统特征开始。OpenCV 5保留了这些经典方法,同时把现代学习式特征匹配作为一等公民引入。
新的Features模块替代原来的Features2D,加入了完整的神经网络式检测、描述和匹配流程。
cv::ALIKED是基于CNN的关键点检测与描述方法,可以像SIFT或ORB一样嵌入已有调用位置;
cv::DISK是通过强化学习训练出来的学习式特征,在宽基线和低纹理场景中更有优势;
cv::LightGlueMatcher则是基于Attention的匹配器,可以输出带置信度的匹配结果,并能接入图像拼接模块。
这不是“新方法替代旧方法”,而是让开发者有了更灵活的选择:简单场景继续用稳定、轻量的传统特征;困难场景则可以直接尝试学习式特征和LightGlue匹配。
核心库更快,也更现代
OpenCV 5并不只是在DNN上做文章。底层core模块也做了很多会影响日常开发体验的改动。
首先是数据类型。OpenCV 5加入了原生FP16,也就是cv::hfloat和CV_16F,还加入了BF16,也就是cv::bfloat和CV_16BF,同时补齐了bool、64位整数等类型。现代AI工作负载大量使用这些数据类型,原生支持意味着少做很多来回转换。
其次是更完整的N维数组和标量支持。过去cv::Mat至少需要二维,这在处理标量、1D数组以及很多模型中间结果时并不自然。OpenCV 5的cv::Mat可以表示0D标量和1D数组,并加入broadcasting,以及transposeND、flipND等N维操作。很多过去需要手工reshape、扩维、挤维的代码,可以变得更直接。
语言层面也更清爽:历史包袱很重的C API正式进入弃用状态;C++17成为最低推荐标准,后续5.x还计划引入C++20 modules;Python侧支持NumPy 2.x,并且让C++算法在Python里更好地支持命名参数。也就是说,过去必须记住一串位置参数的调用,现在可以写成cv.someAlgorithm(threshold=0.5)这种更直观的形式。
硬件加速:让同一套代码跑在更多芯片上
OpenCV 5里还有一个不那么显眼、但非常关键的变化:重新设计了Hardware Acceleration Layer,也就是HAL。
过去支持不同硬件,常常意味着大量条件编译、重复实现和分散在各处的优化代码。OpenCV 5希望把这件事收敛到一套干净的HAL契约里:硬件厂商可以为自己的芯片接入优化kernel,OpenCV在可用时自动调用,开发者的上层代码不用改。
目前已经接入或推进的路径包括:Intel IPP/IPPICV,这是OpenCV早期就很重要的x86/x64加速路径;Arm KleidiCV,面向AArch64,使用NEON、SVE和SME加速核心图像处理与DNN kernel;Qualcomm FastCV,面向Snapdragon等移动平台,可通过Hexagon DSP和NPU加速;RISC-V Vector,也就是RVV,相关工作主要由OpenCV China推动。
底层还有Universal Intrinsics 2.0,用一套向量化代码映射到SSE、AVX2/512、NEON、SVE、RVV等不同指令集。对开发者来说,理想状态很简单:写一次OpenCV代码,落到不同硬件上时尽量自动走最优路径。
3D视觉模块重新整理
OpenCV的3D能力这些年一直在增长,但旧的calib3d模块已经越来越像一个“大抽屉”。OpenCV 5把相关能力拆成三个更清晰的模块:3d、calib和stereo。
3d模块负责基础3D几何与视觉能力,包括I/O、几何基本元素、ICP等算法,以及部分SLAM相关能力;calib模块负责相机标定,包括单相机标定和重构后的多相机标定流程;stereo模块负责双目深度。
更值得注意的功能包括:通过calibrateMultiview进行多相机标定,也就是N相机bundle adjustment;通过registerCameras做相机间外参注册,并支持手眼标定、机器人世界标定等机器人场景;通过loadPointCloud、savePointCloud、loadMesh、saveMesh读写点云和网格,支持OBJ、PLY;通过TSDF、HashTSDF和ColorTSDF完成稠密RGB-D融合,并加入视觉里程计;此外还有包含MAGSAC的现代USAC框架,以及RANSAC平面和球体拟合。
如果你的工作涉及SfM、机器人、三维重建或RGB-D融合,这次调整不是简单改名,而是一次实用的能力升级。
文档终于更好用了
OpenCV 5的文档也重做了。新的文档系统从纯Doxygen转向Sphinx + Doxygen,带来了更现代的阅读体验:左侧导航常驻,手写教程和自动生成的API参考放在一起,Python签名可以和C++一起展示,提交前还有链接检查,整体样式也更清爽。
这类变化听起来不如DNN引擎重写那么“硬核”,但对日常开发非常重要。很多人学习OpenCV、查函数签名、找样例代码,首先接触的就是文档。文档少一点阻力,库本身就更容易被用起来。
OpenCV 5.0到底带来了什么
要点:ONNX算子覆盖率从4.x时期的大约22%提升到80%以上;DNN引擎重写为图引擎,支持融合、动态shape和统一buffer pool;可以通过ENGINE_ORT接入ONNX Runtime;LLM/VLM支持进入DNN模块,内置tokenizer和KV-cache;动态shape ONNX由新的形状推理引擎原生支持;cv::Mat支持0D标量和1D数组;数据类型补齐FP16、BF16、bool、64位整数等。
这些变化合在一起,说明OpenCV 5不是简单增加几个函数,而是在补现代视觉应用所需要的底层能力。
下一步:GPU版DNN引擎,以及非CPU HAL
OpenCV 5.0是一次大更新,但更像是一个新架构的起点。接下来最值得关注的,是两条路线。
第一条是新DNN引擎的原生GPU支持。当前官方展示的DNN benchmark主要在CPU上运行,新图引擎也是CPU优先。如果现在要GPU推理,可以使用ONNX Runtime后端以及CUDA、TensorRT等execution provider。OpenCV后续希望把GPU加速带入自己的原生图引擎,让开发者仍然通过同一个Net API拿到GPU速度,而不是必须额外引入独立运行时。
第二条是非CPU HAL,用于加速前处理和后处理。真实视觉流水线里,模型推理往往只是其中一部分。每一次forward前后都有resize、颜色转换、归一化、letterbox、NMS、mask resize、结果绘制等步骤。今天很多系统是CPU做前后处理,加速器做推理,数据在CPU和GPU/NPU之间来回搬。很多时候,真正的瓶颈不是模型,而是这些搬运。
非CPU HAL的目标,是让常见imgproc函数也能跑在GPU、NPU或其他加速器上。理想流程是:帧保留在加速器上,resize和normalize在上面做,推理在上面做,后处理也在上面
结语
OpenCV 5的意义,不在于多了几个新函数,而在于它把OpenCV带回了现代计算机视觉开发的主战场。全新的DNN引擎解决了最常见的模型部署痛点,核心库和Python接口减少了日常摩擦,HAL为异构硬件打开了更干净的加速路径,3D视觉和特征匹配也补上了近年来的发展。
更重要的是,OpenCV 5没有抛弃庞大的既有用户。经典引擎还在,传统特征还在,已有API尽量保持不变。它一边激进现代化,一边保留兼容性。对这样一个被广泛嵌入科研、教学和工程系统的基础库来说,这种克制很重要。
如果说OpenCV过去二十多年是计算机视觉应用的“基础水电”,那么OpenCV 5就是一次面向AI时代的管线改造。它不会让所有问题一夜之间消失,但它让很多过去绕不开的麻烦,终于有了更干净的解决路径。
使用OpenCV 5
想尽快尝试,可以关注以下入口:
GitHub:https://github.com/opencv/opencv/tree/5.x
Wiki:https://github.com/opencv/opencv/wiki/OpenCV-5
文档:https://docs.opencv.org
官网与下载:https://opencv.org
在「OpenCV与AI深度学习」公众号后台回复:Pytorch函数手册,即可下载学习全网第一份Pytorch函数常用手册,包括Tensors介绍、基础函数介绍、数据处理函数、优化函数、CUDA编程、多处理等十四章内容。
在「OpenCV与AI深度学习」公众号后台回复:OpenCV145,即可下载学习145个OpenCV实例应用代码(Python和C++双语言实现)。
</opencv2>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!