OpenCV各版本差异与演化,从1.x到4.0

本文介绍了OpenCV从1.x到4.0的主要版本变化,包括从C语言基础到C++的转型,对Python和其他语言的支持,以及在计算机视觉技术如特征检测、机器学习、GPU加速和神经网络等方面的演进。OpenCV每个新版本都引入了新技术,优化了性能,并逐步淘汰旧接口,如1.x的CAPI在4.0中不再支持。OpenCV4.0着重于C++11支持,使用内联函数提高性能,并增加了QR码检测和Kinect融合算法等功能。
部署运行你感兴趣的模型镜像

写在前面

最近因项目需要,得把OpenCV捡起来,登录OpenCV官网,竟然发现release了4.0.0-beata版本,所以借此机会,查阅资料,了解下OpenCV各版本的差异及其演化过程,形成了以下几点认识:

  1. 新版本的产生是为了顺应当下的需要,通过版本更新,接纳新技术和新方法,支持新兴编程语言接口,使用新的指令集,优化性能,解决固有问题等
  2. 新技术新方法会优先加入到新的大版本中,即使新的技术方法可以在旧版本中实现,但为了推动用户向新版本迁移,仍会优先加入到新版本中(这条看着与第1条差不多,实际意义是不同的)
  3. 新版本不可避免地会带有旧版本的痕迹,毕竟新版本是从旧版本基础上“生长”出来的,新老版本间能看到比较明显的过渡痕迹,同时出于降低迁移成本的考虑,需要(部分)向前兼容

因此,如果新版本已经稳定,且需要从头开始新项目,先考虑拥抱新版本。若碰到问题,可到旧版本的资料中找找答案。但这并不绝对,具体情况还得具体分析。

下面分析下各版本的差异以及演化路径。

OpenCV版本差异与演化,1.x To 4.0

OpenCV 1.x

OpenCV 最初基于C语言开发,API也都是基于C的,面临内存管理、指针等C语言固有的麻烦。

2006年10月1.0发布时,部分使用了C++,同时支持Python,其中已经有了random trees、boosted trees、neural nets等机器学习方法,完善对图形界面的支持。

2008年10月1.1pre1发布,使用 VS2005构建,Python bindings支持Python 2.6,Linux下支持Octave bindings,在这一版本中加入了SURF、RANSAC、Fast approximate nearest neighbor search等,Face Detection (cvHaarDetectObjects)也变得更快。

OpenCV 2.x

当C++流行起来,OpenCV 2.x发布,其尽量使用C++而不是C,但是为了向前兼容,仍保留了对C API的支持。从2010年开始,2.x决定不再频繁支持和更新C API,而是focus在C++ API,C API仅作备份。

2009年9月2.0 beta发布,主要使用CMake构建,加入了很多新特征、描述子等,如FAST、LBP等。

2010年4月2.1版本,加入了Grabcut等,可以使用SSE/SSE2…指令集。

2010年10月2.2版本发布,OpenCV的模块变成了大家熟悉的模样,像opencv_imgprocopencv_features2d等,同时有了opencv_contrib用于放置尚未成熟的代码,opencv_gpu放置使用CUDA加速的OpenCV函数。

2011年6月起的2.3.x版本、2012年4月起的2.4.x版本,一面增加新方法,一面修复bug,同时加强对GPU、Java for Android、 OpenCL、并行化的支持等等,OpenCV愈加稳定完善,值得注意的是 SIFT和SURF从2.4开始被放到了nonfree 模块(因为专利)。

考虑到过渡,OpenCV 2.4.x仍在维护,不过以后可能仅做bug修复和效率提升,不再增加新功能——鼓励向3.x迁移。

OpenCV 3.x

随着3.x的发布,1.x的C API将被淘汰不再被支持,以后C API可能通过C++源代码自动生成。3.x与2.x不完全兼容,与2.x相比,主要的不同之处在于OpenCV 3.x 的大部分方法都使用了OpenCL加速

2014年8月3.0 alpha发布,除大部分方法都使用OpenCL加速外,3.x默认包含以及使用IPP,同时,matlab bindings、Face Recognition、SIFT、SURF、 text detector、motion templates & simple flow 等都移到了opencv_contrib下(opencv_contrib不仅存放了尚未稳定的代码,同时也存放了涉及专利保护的技术实现),大量涌现的新方法也包含在其中。

2017年8月3.3版本,2017年12月开始的3.4.x版本,opencv_dnn从opencv_contrib移至opencv,同时OpenCV开始支持C++ 11构建,之后明显感到对神经网络的支持在加强,opencv_dnn被持续改进和扩充。

OpenCV 4.0

2018年10月4.0.0发布,OpenCV开始需要支持C++11的编译器才能编译,同时对几百个基础函数使用 "wide universal intrinsics"重写,这些内联函数可以根据目标平台和编译选项映射为SSE2、 SSE4、 AVX2、NEON 或者 VSX 内联函数,获得性能提升。此外,还加入了QR code的检测和识别,以及Kinect Fusion algorithm,DNN也在持续改善和扩充。

总结

这些年来,计算机视觉领域的新技术新方法不断涌现,指令集、编程语言和并行化技术越发先进,OpenCV也在紧跟时代的脚步,不断吸收完善自身。本文仅对OpenCV的演化过程仅总结了部分要点,详细可参见 OpenCV 在 github上的ChangeLog。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们注意到用户询问的是OpenCvSharp运行版本对应的版本号,特别是“v4.0.30319”的含义。但需要澄清的是,OpenCvSharp的版本.NET运行时的版本号(如v4.0.30319)是两个不同的概念。 1. **OpenCvSharp的版本号**:指的是OpenCvSharp库本身的发布版本,例如4.8.0, 4.7.0等。 2. **.NET运行时的版本号**:v4.0.30319是.NET Framework 4.0的运行时版本号,通常出现在程序集版本信息中。 在OpenCvSharp的NuGet包中,每个版本都会针对不同的.NET框架进行编译。例如,OpenCvSharp4 4.8.0版本支持.NET Framework 4.6.1+以及.NET Core/.NET 5+。 因此,用户提到的“OpenCvSharp v4.0.30319”实际上是指该程序集编译时所依赖的.NET Framework运行时版本,而不是OpenCvSharp的库版本。 要获取OpenCvSharp库的确切版本,可以通过以下方式: - 在项目中查看NuGet包管理器中的版本号 - 通过代码获取程序集版本信息 示例代码: ```csharp using System; using System.Reflection; // 获取OpenCvSharp程序集的版本信息 var assembly = Assembly.Load("OpenCvSharp"); var version = assembly.GetName().Version; Console.WriteLine(version); // 例如:4.8.0.0 ``` 如果用户看到的是文件属性中的“文件版本”或“产品版本”,则可能显示为类似4.0.30319的.NET运行时版本,这并不代表OpenCvSharp的库版本。 因此,用户需要明确: - 如果用户看到的是程序集运行时版本(v4.0.30319),这对应的是.NET Framework 4.0,而OpenCvSharp4要求至少.NET Framework 4.6.1,所以这可能是旧版的OpenCvSharp(如2.x或3.x)编译在.NET 4.0上,但OpenCvSharp4不支持。 - 如果用户想确认自己使用的OpenCvSharp库版本,请通过程序集版本获取。 结论:用户提到的“v4.0.30319”不是OpenCvSharp的库版本,而是.NET运行时的版本。无法直接通过这个版本号推断OpenCvSharp的库版本。 建议用户通过代码或NuGet包管理器查看实际安装的OpenCvSharp版本。</think>### OpenCvSharp 版本号解析 根据您提供的运行时版本号 `v4.0.30319`,这实际上是 **.NET Framework 的运行时版本号**,而不是 OpenCvSharp 的版本号。.NET Framework 4.0 的运行时标识就是 `v4.0.30319`[^2]。 #### 关键区分: 1. **.NET 运行时版本**:`v4.0.30319` 表示您使用的是 .NET Framework 4.0 2. **OpenCvSharp 库版本**:这是独立的 NuGet 包版本号(如 4.8.0) #### 兼容性建议: 1. **.NET Framework 4.0 的兼容版本**: ```bash Install-Package OpenCvSharp3-AnyCPU -Version 3.4.1.20181108 ``` 这是最后一个官方支持 .NET 4.0 的稳定版本[^1][^2] 2. **现代版本要求**: ```markdown | OpenCvSharp 版本 | 最低 .NET 要求 | |------------------|-----------------| | 4.x | .NET 4.6.1+ | | 3.4.x | .NET 4.0+ | ``` 若需使用最新功能(如引用[3]提到的 `CV_8UC3` 通道处理),应升级到 .NET 4.6.1+ 后安装: ```bash Install-Package OpenCvSharp4 -Version 4.8.0 ``` #### 版本验证方法: ```csharp // 获取实际安装的 OpenCvSharp 版本 var version = Assembly.GetAssembly(typeof(Mat))?.GetName().Version; Console.WriteLine($"OpenCvSharp 实际版本: {version}"); // 输出类似 4.8.0.0 // 检查运行时环境 Console.WriteLine($"CLR 版本: {Environment.Version}"); // 输出类似 4.0.30319 ``` #### 升级建议: 1. 若需使用卷积核操作(如引用[4]的 `cv2.getStructuringElement`): ```xml <!-- 升级项目到 .NET 4.8 --> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <!-- 安装现代版本 --> <PackageReference Include="OpenCvSharp4" Version="4.8.0" /> <PackageReference Include="OpenCvSharp4.runtime.win" Version="4.8.0" /> ``` 2. 保留旧环境方案: ```csharp // 使用兼容模式初始化 if (Environment.Version.Major == 4 && Environment.Version.Minor == 0) { // 使用 OpenCvSharp3 的旧版 API var mat = new OpenCvSharp3.Mat(); } else { // 使用新版 API var mat = new Mat(); } ``` > **重要提示**:OpenCvSharp 4.x 需要 VC++ 2019 运行时库,而 3.x 需要 VC++ 2015 运行时[^1]。部署时需包含对应版本的 `opencv_worldXXX.dll`(XXX 为版本号)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值