It has been almost 5 years since OpenCV 2.0 has been released, which brought the completely new C++ API and started the new epoch of extensive growth of the project. During the whole 2.x lifecycle we added support of new platforms, including iOS and Android, added GPU acceleration via CUDA and OpenCL, provided complete interface to Python and Java users and built our state-of-art continuous integration system based on github and buildbot. As a result, we now have very stable OpenCV 2.4.x that’s been used in many companies and universities all over the world.
And now we are happy to announce the start of new season, OpenCV 3.x. In which there will be no such radical rehearsal as in 2.0, and yet it’s substantial enough pile of changes and brings a lot of new opportunities for us and you, our great OpenCV community.
The detailed changelog is provided, as usual, at our development site and let us touch some of the highlights:
1. Change in the project architecture. Since very beginning OpenCV was one solid project, built and shipped as a whole, and that was good strategy for many years. However, with constantly growing functionality, including bleeding-edge algorithms published a few minutes before a pull request has been submitted to our repository, and increasing number of contributors (thank you all very much, guys!) we came to the same conclusion and decision as many other big project – the solid model does not work anymore. Let’s use use the core + plugins architecture then!
In addition to our main repository and the additional “test data” repository, we are now glad to introduce http://github.com/itseez/opencv_contrib, where we put a lot of exciting functionality, including already known face recognition and text detection, but also text recognition, new-age edge detectors, state-of-art inpainting, depth maps processing, new optical flow and tracking algorithms etc.
What’s common and what’s different between opencv and opencv_contrib?
- They are both served by our continuous integration system (note the combo-box on the top of the page), although unit tests for contrib are not regularly run yet.
- All or some of these extra modules can be built using our build system, pass OPENCV_EXTRA_MODULES_PATH=/modules to CMake.
- Documentation for contrib is automatically generated and is available at docs.opencv.org/master. It will be made better shaped and more organized by OpenCV 3.0 beta and final release.
- The main opencv is Itseez-supported code, it will have very stable API and probably just a little innovation.
- opencv_contrib is the place where most of the experimental code is put, some parts may change API and it’s where you are welcome to contribute your new exciting algorithms.
2. Thanks to support from Intel and AMD companies, we made GPU acceleration of many vision algorithms very easily accessible to our users. The technology is nicknamed T-API (“transparent API”). A separate guide on this topic is being prepared, but you are welcome to take a look at and try out our t-api samples to see how it works.
3. Intel corporation gave us another exciting present. A subset of Intel Integrated Performance Primitives (IPP) is linked by default into OpenCV and is available at no charge for all our users. And that includes the license to redistribute applications that use IPP-accelerated OpenCV. As you may see, for quite a few image processing functions we achieved very noticeable speedup with IPP (where IPP is compared with OpenCV built with all possible optimizations turned on):
4. Last but not least, OpenCV 3.0 brings a lot of new functionality, such as:
- Text detection and recognition by Lluis Gomez and Stefano Fabri
- HDR by Fedor Morozov and Alexander Shishkov
- KAZE/A-KAZE by Eugene Khvedchenya, the algorithm author Pablo Alcantarilla and some improvements by F. Morozov.
- Smart segmentation and edge-aware filters by Vitaly Lyudvichenko, Yuri Gitman, Alexander Shishkov and Alexander Mordvintsev
- Car detection using Waldboost, ACF by Vlad Shakhuro and Nikita Manovich
- TLD tracker and several common-use optimization algorithms by Alex Leontiev
- Matlab bindings by Hilton Bristow, with support from Mathworks.
- Greatly extended Python bindings, including Python 3 support, and several OpenCV+Python tutorials by Alexander Mordvintsev, Abid Rahman and others.
- 3D Visualization using VTK by Ozan Tonkal and Anatoly Baksheev.
- RGBD module by Vincent Rabaud
- Line Segment Detector by Daniel Angelov
- Many useful Computational Photography algorithms by Siddharth Kherada
- Shape descriptors, matching and morphing shapes (shape module) by Juan Manuel Perez Rua and Ilya Lysenkov
- Long-term tracking + saliency-based improvements (tracking module) by Antonella Cascitelli and Francesco Puja
- Another good pose estimation algorithm and the tutorial on pose estimation by Edgar Riba and Alexander Shishkov
- Line descriptors and matchers by Biagio Montesano and Manuele Tamburanno
- Myriads of improvements in various parts of the library by Steven Puttemans; thank you a lot, Steven!
- Several NEON optimizations by Adrian Stratulat, Cody Rigney, Alexander Petrikov, Yury Gorbachev and others.
- Fast foreach loop over cv::Mat by Kazuki Matsuda
- Image alignment (ECC algorithm) by Georgios Evangelidis
- GDAL image support by Marvin Smith
- RGBD module by Vincent Rabaud
- Fisheye camera model by Ilya Krylov
- OSX framework build script by Eugene Khvedchenya
- Multiple FLANN improvements by Pierre-Emmanuel Viel
- Improved WinRT support by Gregory Morse
- Latent SVM Cascade by Evgeniy Kozhinov and NNSU team (awaiting integration)
- Logistic regression by Rahul Kavi
- Five-point pose estimation algorithm by Bo Li
This release would not be possible without big help from many people all over the world. Thanks to all the people who contributed code, submitted bug reports, patches, reviewed patches and helped us in any other ways. In particular, we would like to thank
Alexander Shishkov (who also maintains opencv.org site), Andrey Pavlenko, Alexander Alekhin, Alexander Smorkalov, Roman Donchenko, Kirill Kornyakov, Andrey Kamaev, Sergey Sivolgin, Vladimir Bystritsky, Sergey Nosov, Nikita Manovich, Evgeniy Talanin, Elena Gvozdeva, Alexander Karsakov, Konstantin Matskevich, Ilya Lavrenov, Anna Kogan, Ivan Korolev, Dinar Ahmatnurov, Andrey Senin, Vlad Vinogradov, Alexey Spizhevoy, Anatoly Baksheev, Marina Kolpakova, Daniil Osokin, Leonid Beynenson, Dmitry Retinsky, Maria Dimashova, Ilya Lysenkov, Andrey Morozov, Victor Eruhimov, Alexander Bovyrin, Sergey Molinov, Gary Bradski, Vincent Rabaud, Harris Gasparakis and many other people.
This is alpha, so expect some glitches, such as partially broken Python bindings, a few failing tests etc. Those items are in progress and also we appreciate your feedback very much.
OpenCV 3.0 beta is expected in middle of this fall and the OpenCV 3.0 final release should be ready by the Christmas/New Year holidays.
OpenCV Development Team.