OpenCV 1.x OpenCV was originally developed based on C language, and its API is also based on C. It faces the inherent troubles of C language, such as memory management and Pointers. When 1.0 was released in October 2006, it was partially C++ and supported Python, with machine learning methods such as random trees, vauxtree, and neural nets to improve graphical interface support. Python Bindings support Python 2.6, Octave Bindings support under Linux, SURF, RANSAC, Fast approximate nearest neighbor search are added in this version, and Face Detection (cvHaarDetectObjects) is also faster. When C++ became popular and OpenCV 2.x was released, it tried to use C++ instead of C, but retained support for the C API for forward compatibility. Starting in 2010, 2.x decided not to support and update THE C API frequently, instead focusing on the C++ API, which is only for backup. In September 2009, 2.0 beta was released, mainly built with CMake, adding many new features, descriptors, etc., such as FAST, LBP, etc. April 2010 version 2.1, added Grabcut etc, can use SSE/SSE2… Instruction set. With the release of version 2.2 in October 2010, OpenCV modules became familiar ones such as Opencv_imgProc, Opencv_features2D, and opencv_contrib for placing immature code. Opencv_gpu places OpenCV functions that use CUDA acceleration. From June 2011 to 2.3.x version, from April 2012 to 2.4.x version, one side of the increase of new methods, one side to fix the bug, while strengthening the GPU, Java for Android, OpenCL, parallelization support, etc., OpenCV is more stable and perfect, It is worth noting that SIFT and SURF have been placed in the nonfree module since 2.4 (due to patents). OpenCV 2.4.x is still being maintained for transition purposes, but it will probably only be bug fixes and efficiency improvements, no new features will be added – migration to 3.x will be encouraged. OpenCV 3.x With the release of 3.x, the 1.x C API will no longer be supported, the C API may be generated automatically through C++ source code. 3.x is not fully compatible with 2.x, the main difference from 2.x is that most methods of OpenCV 3.x use OpenCL acceleration. 3.0 Alpha was released in August 2014. In addition to most methods using OpenCL acceleration, 3.x includes and uses IPP by default. Matlab Bindings, Face Recognition, SIFT, SURF, Text Detector, Motion Templates & Simple Flow All moved to Opencv_contrib (which houses not only unsettled code but also patented technology implementations), where a host of new methods emerged. Opencv_dnn was moved from opencv_contrib to opencv, and opencv began to support C++ 11 builds. After that, it became clear that neural network support was growing. Opencv_dnn has been continuously improved and expanded. OpenCV 4.0 is released in October 2018 at 4.0.0. OpenCV starts with a C++11 compiler to build, and is overwritten with the “wide universal intrinsics” for hundreds of basic functions. These inline functions can be mapped to SSE2, SSE4, AVX2, NEON, or VSX inline functions for improved performance, depending on the target platform and compilation options. In addition, THE detection and recognition of QR code and Kinect Fusion algorithm have also been added, and DNN is also continuously improved and expanded.
—
Reference: From Zhihu
What are the major improvements to opencv3.0? Why is there a big version number upgrade?
OpenCV 3’s latest module at a time
Bad experience with Opencv3.x-Opencl
t = ((double)cv::getTickCount() – t) / cv::getTickFrequency();
std::cout << “cpu time:” << t << std::endl;