|This article relies on references to primary sources. (November 2012)|
|Original author(s)||Intel Corporation, Willow Garage, Itseez|
|Stable release||2.4.7 / November 11, 2013|
OpenCV (Open Source Computer Vision Library) is a library of programming functions mainly aimed at real-time computer vision, developed by Intel, and now supported by Willow Garage and Itseez. It is free for use under the open source BSD license. The library is cross-platform. It focuses mainly on real-time image processing. If the library finds Intel's Integrated Performance Primitives on the system, it will use these proprietary optimized routines to accelerate itself.
Officially launched in 1999, the OpenCV project was initially an Intel Research initiative to advance CPU-intensive applications, part of a series of projects including real-time ray tracing and 3D display walls. The main contributors to the project included a number of optimization experts in Intel Russia, as well as Intel’s Performance Library Team. In the early days of OpenCV, the goals of the project were described as
- Advance vision research by providing not only open but also optimized code for basic vision infrastructure. No more reinventing the wheel.
- Disseminate vision knowledge by providing a common infrastructure that developers could build on, so that code would be more readily readable and transferable.
- Advance vision-based commercial applications by making portable, performance-optimized code available for free—with a license that did not require to be open or free themselves.
The first alpha version of OpenCV was released to the public at the IEEE Conference on Computer Vision and Pattern Recognition in 2000, and five betas were released between 2001 and 2005. The first 1.0 version was released in 2006. In mid-2008, OpenCV obtained corporate support from Willow Garage, and is now again under active development. A version 1.1 "pre-release" was released in October 2008.
The second major release of the OpenCV was on October 2009. OpenCV 2 includes major changes to the C++ interface, aiming at easier, more type-safe patterns, new functions, and better implementations for existing ones in terms of performance (especially on multi-core systems). Official releases now occur every six months and development is now done by an independent Russian team supported by commercial corporations.
OpenCV's application areas include:
- 2D and 3D feature toolkits
- Egomotion estimation
- Facial recognition system
- Gesture recognition
- Human–computer interaction (HCI)
- Mobile robotics
- Motion understanding
- Object identification
- Segmentation and Recognition
- Stereopsis Stereo vision: depth perception from 2 cameras
- Structure from motion (SFM)
- Motion tracking
- Augmented reality
To support some of the above areas, OpenCV includes a statistical machine learning library that contains:
- Boosting (meta-algorithm)
- Decision tree learning
- Gradient boosting trees
- Expectation-maximization algorithm
- k-nearest neighbor algorithm
- Naive Bayes classifier
- Artificial neural networks
- Random forest
- Support vector machine (SVM)
OpenCV is written in C++ and its primary interface is in C++, but it still retains a less comprehensive though extensive older C interface. There are now full interfaces in Python, Java and MATLAB/OCTAVE (as of version 2.5). The API for these interfaces can be found in the online documentation. Wrappers in other languages such as C#, Ch, Ruby have been developed to encourage adoption by a wider audience.
All of the new developments and algorithms in OpenCV are now developed in the C++ interface.
OpenCV runs on Windows, Android, Maemo, FreeBSD, OpenBSD, iOS, BlackBerry 10, Linux and OS X. The user can get official releases from SourceForge, or take the current snapshot under SVN from there. OpenCV uses CMake.
The BaseClasses from DirectShow SDK is required to build some camera input-related parts of OpenCV on Windows. This SDK is found in the Samples\Multimedia\DirectShow\BaseClasses subdirectory of the Microsoft Platform SDK (or DirectX SDK 8.0 to 9.0c / DirectX Media SDK prior to 6.0), which must be built prior to the building of OpenCV.
- AForge.NET, a computer vision library for the Common Language Runtime (.NET Framework and Mono).
- ROS (Robot Operating System) OpenCV is used as the primary vision package in ROS.
- VXL, an alternative library written in C++.
- Integrating Vision Toolkit (IVT), a fast and easy-to-use C++ library with optional interface to the OpenCV.
- CVIPtools, A complete GUI based Computer Vision and Image Processing software environment, with C function libraries, a COM based dll, along with two utility programs for algorithm development and batch processing.
- OpenCV change logs: http://code.opencv.org/projects/opencv/wiki/ChangeLog
- OpenCV Developer Site: http://code.opencv.org
- OpenCV User Site: http://opencv.org/
- OpenCV C interface: http://docs.opencv.org
- Ch OpenCV: http://www.softintegration.com/products/thirdparty/opencv/
- Cuda GPU port: http://opencv.org/platforms/cuda.html
- OpenCL Announcement: http://opencv.org/opencv-v2-4-3rc-is-under-way.html
- OpenCL-accelerated Computer Vision API Reference: http://docs.opencv.org/modules/ocl/doc/ocl.html
- Android port: http://opencv.willowgarage.com/wiki/AndroidExperimental
- Maemo port: https://garage.maemo.org/projects/opencv
- iPhone port: http://www.eosgarden.com/en/opensource/opencv-ios/overview/
- BlackBerry 10 (partial port): https://github.com/blackberry/OpenCV