OpenCV是干什么的(新手必看)
OpenCV(Open Source Computer Vision Library,开源计算机视觉库)是一个基于 BSD 许可(开源)发布的跨平台计算机视觉和机器学习软件库,可以运行在 Linux、Windows、Android 和 Mac OS 操作系统上。它由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,属于轻量级的、非常高效的软件库。
OpenCV 主要倾向于实时视觉应用,并在可用时利用 MMX 和 SSE 指令,如今也提供对于 C#、Ch、Ruby、Go 的支持。
OpenCV 提供的视觉处理算法非常丰富,并且部分以 C语言编写,加上其开源的特性,若处理得当,则不需要添加新的外部支持,也可以完整地编译链接生成执行程序,所以很多人用它来做算法的移植。OpenCV 的代码经过适当改写可以正常运行在 DSP 系统和 ARM 嵌入式系统中。
OpenCV 是一个跨平台的计算机视觉库,目标是实现实时计算机视觉,也就是用摄像机和计算机代替人眼对目标进行识别、跟踪以及测量等,并进一步做图像处理。图像处理又称为影像处理,是用计算机对图像进行分析,以达到所需结果的技术,一般包括图像压缩、增强和复原,以及匹配、描述和识别。
目前所说的图像处理一般是指数字图像处理。计算机视觉与图像处理的区别主要在于:
这两者相辅相成,从而使得机器可以在一定程度上模拟人的一些行为,从而使机器更加人性化、智能化。
开源特性以及强大的社区支持使得 OpenCV 发展极其迅速:
OpenCV 随着工业 4.0 与机器人无人机的发展,已经在应用领域得到了广泛应用,有越来越多的从事机器视觉与图像处理的开发者选择 OpenCV 作为开发工具。
计算机视觉市场巨大而且持续增长,但这方面没有标准API,如今的计算机视觉软件大概有以下 3 种:
标准的 API 将简化计算机视觉程序和解决方案的开发,OpenCV 致力于成为这样的标准API。
OpenCV 致力于真实世界的实时应用,通过优化C代码提升其执行速度,并且可以通过购买 Intel 的 IPP(Integrated Performance Primitives,高性能多媒体函数库)得到更快的处理速度。
OpenCV 的应用领域非常广泛,比如人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶、军工、卫星导航等。可以说学好了 OpenCV,就业和职业发展前景广阔!
目前 OpenCV 最新版是 4.10,它发布于 2024 年 6 月,官网相关发布宣传图如下图所示:
OpenCV 最显著的优化就是从这个 4.10 版本开始,对 JPEG 图像的读取和解码有了 77% 的速度提升,超过了 scikit-image、imageio、pillow 等工具。其他改进要点如下:
1) dnn 模块的改进,包括:
2) core 模块的改进,包括:
3) imgproc 模块的改进,包括:
4) 支持 CUDA 12.4+。
5) 添加了 zlib-ng 作为经典 zlib 的替代品。
6) 对 Wayland、Apple VisionOS 和 Windows ARM64 的实验性支持。
7) OpenCV Model Zoo 提供跨平台的预训练深度学习模型。其新增功能包括:
OpenCV 主要倾向于实时视觉应用,并在可用时利用 MMX 和 SSE 指令,如今也提供对于 C#、Ch、Ruby、Go 的支持。
OpenCV 提供的视觉处理算法非常丰富,并且部分以 C语言编写,加上其开源的特性,若处理得当,则不需要添加新的外部支持,也可以完整地编译链接生成执行程序,所以很多人用它来做算法的移植。OpenCV 的代码经过适当改写可以正常运行在 DSP 系统和 ARM 嵌入式系统中。
OpenCV 是一个跨平台的计算机视觉库,目标是实现实时计算机视觉,也就是用摄像机和计算机代替人眼对目标进行识别、跟踪以及测量等,并进一步做图像处理。图像处理又称为影像处理,是用计算机对图像进行分析,以达到所需结果的技术,一般包括图像压缩、增强和复原,以及匹配、描述和识别。
目前所说的图像处理一般是指数字图像处理。计算机视觉与图像处理的区别主要在于:
- 计算机视觉的侧重点在于使用计算机来模拟人的视觉,对客观事物进行“感知”;
- 图像处理的侧重点在于“处理”,提取所需要的有效信息。
这两者相辅相成,从而使得机器可以在一定程度上模拟人的一些行为,从而使机器更加人性化、智能化。
开源特性以及强大的社区支持使得 OpenCV 发展极其迅速:
- OpenCV 1.0 正式版本于 2006 年发布,可以运行在 Mac OS 以及 Linux 平台上,但是主要提供 C 的接口;
- OpenCV 2.0 版本于 2009 年发布,代码已显著优化,同时带来了全新的 C++ 函数的接口,将其能级无限放大,使开发者使用更加方便;另外,增加了新的平台支持,包括 iOS 和 Android,通过 CUDA 和 OpenGL 实现了 GPU 加速;在编程语言方面,还为 Python 和 Java 用户提供了接口。
- 2014 年 8 月,OpenCV 3.0 Alpha 发布,重大革新之处在于 OpenCV 3.0 改变了项目架构的方式。之前的 OpenCV 是一个相对于整体的项目,各个模块都是以整体的形式构建然后组合在一起;OpenCV 3.0 抛弃了整体架构,使用内核+插件的架构形式,更加轻量化。
OpenCV 随着工业 4.0 与机器人无人机的发展,已经在应用领域得到了广泛应用,有越来越多的从事机器视觉与图像处理的开发者选择 OpenCV 作为开发工具。
计算机视觉市场巨大而且持续增长,但这方面没有标准API,如今的计算机视觉软件大概有以下 3 种:
- 研究派代码(慢,不稳定,独立,与其他库不兼容);
- 耗费很高的商业化工具(比如 Halcon、MATLAB+Simulink);
- 依赖硬件的一些特别的解决方案(比如视频监控、制造控制系统、医疗设备)。
标准的 API 将简化计算机视觉程序和解决方案的开发,OpenCV 致力于成为这样的标准API。
OpenCV 致力于真实世界的实时应用,通过优化C代码提升其执行速度,并且可以通过购买 Intel 的 IPP(Integrated Performance Primitives,高性能多媒体函数库)得到更快的处理速度。
OpenCV 的应用领域非常广泛,比如人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶、军工、卫星导航等。可以说学好了 OpenCV,就业和职业发展前景广阔!
目前 OpenCV 最新版是 4.10,它发布于 2024 年 6 月,官网相关发布宣传图如下图所示:

OpenCV 最显著的优化就是从这个 4.10 版本开始,对 JPEG 图像的读取和解码有了 77% 的速度提升,超过了 scikit-image、imageio、pillow 等工具。其他改进要点如下:
1) dnn 模块的改进,包括:
- 改善内存消耗;
- 增加了将模型转储为与 Netron 工具兼容的 pbtxt 格式的功能;
- 支持多个新的 TFlite、ONNX 和 OpenVINO 层;
- 改进了现代 Yolo 探测器支持;
- 添加了 cuDNN 9+ 和 OpenVINO 2024 支持。
2) core 模块的改进,包括:
- 为 cv::Mat 模块添加了 CV_FP16 数据类型;
- 扩展了 HAL API,用于 minMaxIdx、LUT、meanStdDev 和其他函数。
3) imgproc 模块的改进,包括:
- 为 cv::remap 模块添加了相对位移场选项;
- 重构 findContours 和 EMD;
- 扩展了 HAL API,用于 projectPoints、equalizeHist、Otsu 阈值和其他功能;
- 添加了针对现代 ARMv8 和 ARMv9 平台优化的新底层 HAL 库(KleidiCV)。
4) 支持 CUDA 12.4+。
5) 添加了 zlib-ng 作为经典 zlib 的替代品。
6) 对 Wayland、Apple VisionOS 和 Windows ARM64 的实验性支持。
7) OpenCV Model Zoo 提供跨平台的预训练深度学习模型。其新增功能包括:
- 支持更多的模型结构,例如新的卷积架构或者神经网络架构;
- 提升模型的性能,可能通过模型优化或者使用更高效的实现方式;
- 提供更多的预处理和后处理的选项,以便用户可以更灵活地使用这些模型;
- 增加对新硬件或者新框架的支持,例如新版的 TensorRT 或是 ONNX Runtime。