计算机视觉库-OpenCV


OpenCV是Intel®开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成并在BSD协议下授权,实现了图像处理和计算机视觉方面的很多通用算法。拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。

OpenCV is released under a BSD license, it is free for both academic and commercial use. It has C++, C, Python and soon Java interfaces running on Windows, Linux, Android and Mac. The library has >2500 optimized algorithms (see figure below). It is used around the world, has >2.5M downloads and >40K people in the user group. Uses range from interactive art, to mine inspection, stitching maps on the web on through advanced robotics.
OpenCV 对非商业应用和商业应用都是免费的,OpenCV 为Intel Integrated Performance Primitives (IPP) 提供了透明接口,这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。OpenCV可以在Windows, Android,Maemo,FreeBSD,OpenBSD,iOS,Linux和Mac OS等平台上运行。用户可以在SourceForge获得官方版本,或者从SVN获得开发版本,OpenCV也是用CMake。
OpenCV 开源协议将从 BSD 变更为 Apache 2
2020年07月15日,计算机视觉库 OpenCV 即将迎来 20 周年,其重要版本 OpenCV 5 也发布在即。OpenCV 官方宣布:OpenCV 的开源许可协议将从 3-clause BSD 变更为 Apache 2。

自项目发布之初,OpenCV 就一直使用较为宽松的 BSD 协议。然而 BSD 协议已很难满足快速发展的计算机视觉领域,尤其因为该协议不涉及专利,而使用该协议的代码很有可能包含一些专利算法的实现。根据 OpenCV 的介绍,“从传统的视觉算法到深度学习拓扑网络以及两者的混合,越来越多的算法申请了专利”。但在 BSD 条款下,专利用户的权利难以得到保障。
此前的报道有提到过,为了避免这个问题,OpenCV 选择不接收有专利的算法。这样做虽然保障了安全性,但也让一些优秀算法无法进入 OpenCV。
经过考量,OpenCV 团队发现 Apache 2 是最为有效的解决方案。因为 “Apache 2 比 BSD 协议更新,提供了与 BSD 许可相同的免费使用特性,还包含有关专利的使用条款”。关于专利,Apache 2 中有两项条款做了大致说明:
如果个人或实体在 Apache 2 协议下提供代码,由于包含的专利被授予了一个隐含许可,则用户不能因违反该实体在该代码中的专利或从该代码派生的作品中的专利而被起诉。
如果个人或实体(A)决定起诉某人或某个实体(B),被起诉的(B)创建了一个由(A)的专利所涵盖的上述(1)中代码派生的作品,那么(A)将失去他们所有的 Apache 2 专利诉讼保护,从而可能使他们面临其他方面的法律攻击。
OpenCV 表示,虽然这种专利保护不是绝对的,但 Apache 2 在这方面目前是最先进的,因此决定进行协议变更。
迁移将从 OpenCV 4.4 开始,考虑到原有许可和原有版权,该版本会在同一个仓库中复制分支。仍旧需要使用 BSD 许可证的用户,可以继续使用 OpenCV 2.x、OpenCV 3.x 和 OpenCV 4.x,以及最新的 OpenCV 4.4。
从 OpenCV pre-5.0(将在新创建的分支中开发)和 OpenCV pre-4.5(“master”分支)开始,许可证将正式更改为 Apache 2。所有新功能的贡献者都必须同意将他们的代码在 Apache 2 许可证下授权。此次协议变更对于 OpenCV 用户来说并无太大变化,主要是需要增加针对专利诉讼的保护措施。Apache 2 许可下的 OpenCV 仍然可以自由地用于商业和非商业项目。
最新版本:3.0
该版本主要改进:
OpenCV 提供了通过 cv::getBuildInformation() 获取完整构建信息的方法
支持Mac OS x下用ffmpeg进行视频读写的操作
MOG2 background subtraction by Zoran Zivkovic was optimized using TBB.
文档的完善
修复了多个bug
支持 Asus Xtion
最新版本:4.5
core:增加了对并行后端的支持,特殊的 OpenCV 构建允许选择并行后端和/或通过插件动态加载它;
imgproc:增加了 IntelligentScissors 的实现。该功能已集成到 CVAT 注释工具中,可以在https://cvat.org 上在线试用;
videoio: 改进的硬件加速视频解码/编码任务。
DNN 模块:
改进了 TensorFlow 解析错误的调试;
改进了图层/激活/支持更多模型;
优化了 NMS 处理、DetectionOutput;
修复了 Div with constant、MatMul、Reshape;
增加了支持:Mish ONNX 子图、NormalizeL2 (ONNX)、LeakyReLU (TensorFlow)、TanH (Darknet)、SAM (Darknet)、Exp;
增加了对OpenVINO 2021.3版本的支持。
G-API 模块:
支持 Python:
引入了一个新的 Python 后端 —— 现在 G-API 可以运行用 Python 编写的自定义内核,作为管道的一部分;
扩展了 G-API Python 绑定中的推理支持;
在 G-API 的 Python 绑定中增加了更多的图形数据类型支持;
推理支持:
在 OpenVINO 推理后端中引入了动态输入/CNN 重塑功能;
在 OpenVINO 推理后端引入异步执行支持,现在推理可以在多个请求中并行运行,以增加流密度/吞吐量;
在 ONNX 推理后端中扩展了 INT64/INT32 支持的数据类型,在 OpenVINO 推理后端中扩展了 INT32 支持的数据类型;
在 ONNX 后端引入 cv::GFrame/cv::MediaFrame 和恒定支持;
媒体支持:
在绘图/渲染界面中引入了 cv::GFrame / cv::MediaFrame 支持;
在流媒体模式中引入了多流媒体输入支持和帧同步策略,以支持立体声等情况;
增加了 Y 和 UV 操作,以在图形级别访问 cv::GFrame 的 NV12 数据;
如果媒体格式不同,转换是即时完成的;
操作和内核:
增加了新操作的性能测试(MorphologyEx、BoundingRect、FitLine、FindContours、KMeans、Kalman、BackgroundSubtractor);
修正了 PlaidML 后台的 RMat 输入支持;
为 Fluid AbsDiffC、AddWeighted 和 bitwise 操作添加了 ARM NEON 优化。
更多详情可查看此处。
最新版本:4.7
该版本于2022年12月下旬发布,主要更新内容如下:
DNN:
新的 ONNX 层
对卷积的性能进行了显著的优化,Winograd 算法的实现
支持 OpenVino 2022.1
算法:
ArUco 标记和 April 标签支持,包括 ChAruco 的检测和校准
二维码检测和解码质量的提高,支持对齐标记
基于神经网络的 Nanotrack v2 跟踪器
Stackblur 算法的实现
多媒体:
支持 FFmpeg 5.x。
支持 CUDA 12.0。通过现代 Video Codec SDK 在 NVIDIA 平台上支持硬件加速的视频编解码器。
使用 FFmpeg 支持 CV_16UC1 读 / 写视频
在 Mac 上用本地媒体 API 提供方向元数据支持
新的基于迭代器的 API 用于多页图像格式
对 PNG 格式的 libSPNG 支持
对自建的 libJPEG-Turbo 的 SIMD 加速
在 Android 上支持 H264/H265
G-API:将所有核心 API 暴露给 Python,包括有状态的内核
优化:用于可扩展矢量指令的新通用内在函数后端。RISC-V RVV 1.0 的第一个可扩展实现
DNN 模块补丁 :
改进层/支持更多模型:
添加了 CANN 后端支持
添加了用于多类对象检测的 bathed NMS
加速卷积,特别适用于 ARM CPU
Winograd 的卷积优化
更多详情可查看此处。
最新版本:4.10
根据“OpenCV 中国团队”于2024年6月上旬介绍,从 4.10 开始 OpenCV 对 JPEG 图像的读取和解码有了 77% 的速度提升,超过了 scikit-image、imageio、pillow。下边是该版本的一些亮点:
dnn 模块的改进:
改善内存消耗
增加了将模型转储为与 Netron 工具兼容的 pbtxt 格式的功能
支持多个新的 TFlite、ONNX 和 OpenVINO 层
改进了现代 Yolo 探测器支持
添加了 CuDNN 9+ 和 OpenVINO 2024 支持
core 模块的改进:
为 cv::Mat 添加了 CV_FP16 数据类型
扩展了 HAL API,用于 minMaxIdx、LUT、meanStdDev 和其他函数
imgproc 模块的改进:
为 cv::remap 添加了相对位移场选项
重构 findContours 和 EMD
扩展了 HAL API,用于 projectPoints、equalizeHist、Otsu 阈值和其他功能
添加了针对现代 ARMv8 和 ARMv9 平台优化的新底层 HAL 库(KleidiCV)
支持 CUDA 12.4+
添加了 zlib-ng 作为经典 zlib 的替代品
对 Wayland、Apple VisionOS 和 Windows ARM64 的实验性支持
OpenCV Model Zoo 新增几个功能
官方主页:
http://www.opencv.org.cn/
http://opencv.willowgarage.com/wiki/

OpenCV is released under a BSD license, it is free for both academic and commercial use. It has C++, C, Python and soon Java interfaces running on Windows, Linux, Android and Mac. The library has >2500 optimized algorithms (see figure below). It is used around the world, has >2.5M downloads and >40K people in the user group. Uses range from interactive art, to mine inspection, stitching maps on the web on through advanced robotics.
OpenCV 对非商业应用和商业应用都是免费的,OpenCV 为Intel Integrated Performance Primitives (IPP) 提供了透明接口,这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。OpenCV可以在Windows, Android,Maemo,FreeBSD,OpenBSD,iOS,Linux和Mac OS等平台上运行。用户可以在SourceForge获得官方版本,或者从SVN获得开发版本,OpenCV也是用CMake。
OpenCV 开源协议将从 BSD 变更为 Apache 2
2020年07月15日,计算机视觉库 OpenCV 即将迎来 20 周年,其重要版本 OpenCV 5 也发布在即。OpenCV 官方宣布:OpenCV 的开源许可协议将从 3-clause BSD 变更为 Apache 2。

自项目发布之初,OpenCV 就一直使用较为宽松的 BSD 协议。然而 BSD 协议已很难满足快速发展的计算机视觉领域,尤其因为该协议不涉及专利,而使用该协议的代码很有可能包含一些专利算法的实现。根据 OpenCV 的介绍,“从传统的视觉算法到深度学习拓扑网络以及两者的混合,越来越多的算法申请了专利”。但在 BSD 条款下,专利用户的权利难以得到保障。
此前的报道有提到过,为了避免这个问题,OpenCV 选择不接收有专利的算法。这样做虽然保障了安全性,但也让一些优秀算法无法进入 OpenCV。
经过考量,OpenCV 团队发现 Apache 2 是最为有效的解决方案。因为 “Apache 2 比 BSD 协议更新,提供了与 BSD 许可相同的免费使用特性,还包含有关专利的使用条款”。关于专利,Apache 2 中有两项条款做了大致说明:
如果个人或实体在 Apache 2 协议下提供代码,由于包含的专利被授予了一个隐含许可,则用户不能因违反该实体在该代码中的专利或从该代码派生的作品中的专利而被起诉。
如果个人或实体(A)决定起诉某人或某个实体(B),被起诉的(B)创建了一个由(A)的专利所涵盖的上述(1)中代码派生的作品,那么(A)将失去他们所有的 Apache 2 专利诉讼保护,从而可能使他们面临其他方面的法律攻击。
OpenCV 表示,虽然这种专利保护不是绝对的,但 Apache 2 在这方面目前是最先进的,因此决定进行协议变更。
迁移将从 OpenCV 4.4 开始,考虑到原有许可和原有版权,该版本会在同一个仓库中复制分支。仍旧需要使用 BSD 许可证的用户,可以继续使用 OpenCV 2.x、OpenCV 3.x 和 OpenCV 4.x,以及最新的 OpenCV 4.4。
从 OpenCV pre-5.0(将在新创建的分支中开发)和 OpenCV pre-4.5(“master”分支)开始,许可证将正式更改为 Apache 2。所有新功能的贡献者都必须同意将他们的代码在 Apache 2 许可证下授权。此次协议变更对于 OpenCV 用户来说并无太大变化,主要是需要增加针对专利诉讼的保护措施。Apache 2 许可下的 OpenCV 仍然可以自由地用于商业和非商业项目。
最新版本:3.0
该版本主要改进:
OpenCV 提供了通过 cv::getBuildInformation() 获取完整构建信息的方法
支持Mac OS x下用ffmpeg进行视频读写的操作
MOG2 background subtraction by Zoran Zivkovic was optimized using TBB.
文档的完善
修复了多个bug
支持 Asus Xtion
最新版本:4.5
core:增加了对并行后端的支持,特殊的 OpenCV 构建允许选择并行后端和/或通过插件动态加载它;
imgproc:增加了 IntelligentScissors 的实现。该功能已集成到 CVAT 注释工具中,可以在https://cvat.org 上在线试用;
videoio: 改进的硬件加速视频解码/编码任务。
DNN 模块:
改进了 TensorFlow 解析错误的调试;
改进了图层/激活/支持更多模型;
优化了 NMS 处理、DetectionOutput;
修复了 Div with constant、MatMul、Reshape;
增加了支持:Mish ONNX 子图、NormalizeL2 (ONNX)、LeakyReLU (TensorFlow)、TanH (Darknet)、SAM (Darknet)、Exp;
增加了对OpenVINO 2021.3版本的支持。
G-API 模块:
支持 Python:
引入了一个新的 Python 后端 —— 现在 G-API 可以运行用 Python 编写的自定义内核,作为管道的一部分;
扩展了 G-API Python 绑定中的推理支持;
在 G-API 的 Python 绑定中增加了更多的图形数据类型支持;
推理支持:
在 OpenVINO 推理后端中引入了动态输入/CNN 重塑功能;
在 OpenVINO 推理后端引入异步执行支持,现在推理可以在多个请求中并行运行,以增加流密度/吞吐量;
在 ONNX 推理后端中扩展了 INT64/INT32 支持的数据类型,在 OpenVINO 推理后端中扩展了 INT32 支持的数据类型;
在 ONNX 后端引入 cv::GFrame/cv::MediaFrame 和恒定支持;
媒体支持:
在绘图/渲染界面中引入了 cv::GFrame / cv::MediaFrame 支持;
在流媒体模式中引入了多流媒体输入支持和帧同步策略,以支持立体声等情况;
增加了 Y 和 UV 操作,以在图形级别访问 cv::GFrame 的 NV12 数据;
如果媒体格式不同,转换是即时完成的;
操作和内核:
增加了新操作的性能测试(MorphologyEx、BoundingRect、FitLine、FindContours、KMeans、Kalman、BackgroundSubtractor);
修正了 PlaidML 后台的 RMat 输入支持;
为 Fluid AbsDiffC、AddWeighted 和 bitwise 操作添加了 ARM NEON 优化。
更多详情可查看此处。
最新版本:4.7
该版本于2022年12月下旬发布,主要更新内容如下:
DNN:
新的 ONNX 层
对卷积的性能进行了显著的优化,Winograd 算法的实现
支持 OpenVino 2022.1
算法:
ArUco 标记和 April 标签支持,包括 ChAruco 的检测和校准
二维码检测和解码质量的提高,支持对齐标记
基于神经网络的 Nanotrack v2 跟踪器
Stackblur 算法的实现
多媒体:
支持 FFmpeg 5.x。
支持 CUDA 12.0。通过现代 Video Codec SDK 在 NVIDIA 平台上支持硬件加速的视频编解码器。
使用 FFmpeg 支持 CV_16UC1 读 / 写视频
在 Mac 上用本地媒体 API 提供方向元数据支持
新的基于迭代器的 API 用于多页图像格式
对 PNG 格式的 libSPNG 支持
对自建的 libJPEG-Turbo 的 SIMD 加速
在 Android 上支持 H264/H265
G-API:将所有核心 API 暴露给 Python,包括有状态的内核
优化:用于可扩展矢量指令的新通用内在函数后端。RISC-V RVV 1.0 的第一个可扩展实现
DNN 模块补丁 :
改进层/支持更多模型:
添加了 CANN 后端支持
添加了用于多类对象检测的 bathed NMS
加速卷积,特别适用于 ARM CPU
Winograd 的卷积优化
更多详情可查看此处。
最新版本:4.10
根据“OpenCV 中国团队”于2024年6月上旬介绍,从 4.10 开始 OpenCV 对 JPEG 图像的读取和解码有了 77% 的速度提升,超过了 scikit-image、imageio、pillow。下边是该版本的一些亮点:
dnn 模块的改进:
改善内存消耗
增加了将模型转储为与 Netron 工具兼容的 pbtxt 格式的功能
支持多个新的 TFlite、ONNX 和 OpenVINO 层
改进了现代 Yolo 探测器支持
添加了 CuDNN 9+ 和 OpenVINO 2024 支持
core 模块的改进:
为 cv::Mat 添加了 CV_FP16 数据类型
扩展了 HAL API,用于 minMaxIdx、LUT、meanStdDev 和其他函数
imgproc 模块的改进:
为 cv::remap 添加了相对位移场选项
重构 findContours 和 EMD
扩展了 HAL API,用于 projectPoints、equalizeHist、Otsu 阈值和其他功能
添加了针对现代 ARMv8 和 ARMv9 平台优化的新底层 HAL 库(KleidiCV)
支持 CUDA 12.4+
添加了 zlib-ng 作为经典 zlib 的替代品
对 Wayland、Apple VisionOS 和 Windows ARM64 的实验性支持
OpenCV Model Zoo 新增几个功能
官方主页:
http://www.opencv.org.cn/
http://opencv.willowgarage.com/wiki/
该文章最后由 阿炯 于 2024-06-09 20:54:57 更新,目前是第 2 版。