Welcome: Hunan Intelligent Applications Tecgnology CO.,ltd.-HNIAT.com
Language: Chinese ∷  English

Industry tracking

Differences and Evolution of OpenCV Versions from 1.x to 4.0

Written in front

Recently, due to the need of the project, OpenCV has to be picked up and logged on OpenCV official website. It was unexpectedly found that release version 4.0.0-beata. Therefore, taking this opportunity to consult the information and understand the differences of OpenCV versions and their evolution process, the following understandings were formed:

The new version is designed to meet the current needs, through version updating, accepting new technologies and methods, supporting emerging programming language interfaces, using new instruction sets, optimizing performance, solving inherent problems, etc.

New technology and new methods will be added to the new version first, even if the new technology and method can be implemented in the old version, but in order to promote users to migrate to the new version, they will still be added to the new version first (this looks like Article 1, but the actual meaning is different).

The new version will inevitably bear the traces of the old version. After all, the new version is "grown" from the old version. There are obvious transitional traces between the new version and the old version. At the same time, for the sake of reducing the cost of migration, it needs to be compatible (partially) forward.

Therefore, if the new version is stable and needs to start a new project from scratch, consider embracing the new version first. If you encounter problems, you can find answers in the old version of the information. But this is not absolute, the specific situation has to be analyzed.

The following is an analysis of the differences between the versions and the evolution path.

OpenCV Version Difference and Evolution, 1.x To 4.0

OpenCV

OpenCV 1.x

OpenCV was originally developed based on C language. API is also based on C language. It is facing the inherent troubles of C language such as memory management and pointer.

When it was released on October 1.0, 2006, part of it used C++, and supported Python. There were random trees, boosted trees, neural nets and other machine learning methods to improve the support of graphical interface.

On October 1, 2008, Pre1 was released using VS 2005, Python bindings supported Python 2.6, and Octave bindings supported under Linux. SURF, RANSAC, Fast approximate nearest neighbor search were added to this version, and Face Detection (cvHaar DetectObjects) became faster.

OpenCV 2.x

When C++ became popular and OpenCV 2.x was released, it tried to use C++ instead of C++, but in order to be compatible forward, it still retained support for C API. Beginning in 2010, 2.x decided not to support and update the C API frequently, but to focus on the C++ API, which is backed up only.

In September 2009, beta was released, which mainly uses CMake to build, and many new features and descriptors were added, such as FAST, LBP and so on.

Apr. 2010 version 1, added Grabcut, etc., can use SSE / SSE2.. Instruction set.

In October 2.2, 2010, OpenCV modules became familiar, such as opencv_imgproc, opencv_features2d, etc. At the same time, opencv_contrib was used to place immature code, and opencv_gpu was used to place OpenCV functions accelerated by CUDA.

The 2.3.x version from June 2011 and the 2.4.x version from April 2012 add new methods and fix bugs while strengthening support for GPU, Java for Android, OpenCL, parallelization and so on. OpenCV has become more stable and perfect. It is noteworthy that SIFT and SURF have been put into the nonfree module since 2.4 (because of patents).

Considering the transition, OpenCV 2.4.x is still being maintained, but in the future it may only do bug fixes and efficiency improvements without adding new features - encouraging migration to 3.x.

OpenCV 3.x

With the release of 3.x, 1.x C API will be eliminated and no longer supported. In the future, CAPI may be generated automatically through C++ source code. 3. x is incompatible with 2. X. Compared with 2. x, the main difference is that most methods of OpenCV 3. x use OpenCL acceleration.

In August 2014, 3.0 alpha was released. Apart from most methods using OpenCL acceleration, 3.x defaults to include and use IPP. Meanwhile, matlab bindings, Face Recognition, SIFT, SURF, text detector, motion templates and simple flow are all moved to opencv_contrib (opencv_contrib not only stores unstable code, but also stores technologies related to patent protection). A large number of new methods are also included.

3.3 in August 2017 and 3.4.x in December 2017. Opencv_dnn moved from opencv_contrib to opencv, and OpenCV began to support C++ 11 construction. After that, it was obvious that the support for neural networks was strengthened, and opencv_dnn was continuously improved and expanded.

OpenCV 4

With the release of 4.0.0 in October 2018, OpenCV began to require a C++ 11-enabled compiler to compile, while rewriting hundreds of basic functions using "wide universal intrinsics", which can be mapped to SSE2, SSE4, AVX2, NEON, or VSX inline functions based on the target platform and compilation options, to improve performance. In addition, QR code detection and recognition, as well as Kinect Fusion algorithm, are added, and DNN is continually improving and expanding.

summary

Over the years, new technologies and methods have emerged in the field of computer vision. Instruction set, programming language and parallelization technology have become more advanced. OpenCV is keeping pace with the times and constantly absorbing and perfecting itself. This article only summarizes some key points about the evolution of OpenCV. See ChangeLog of OpenCV on GitHub for details.

CONTACT US

Contact: Manager Xu

Phone: 13907330718

Tel: 0731-22222718

Email: hniatcom@163.com

Add: Room 603, 6th Floor, Shifting Room, No. 2, Orbit Zhigu, No. 79 Liancheng Road, Shifeng District, Zhuzhou City, Hunan Province

Scan the qr codeClose
the qr code