OpenCV
Encyclopedia
OpenCV is a library of programming functions mainly aimed at real time computer vision
, developed by Intel
and now supported by Willow Garage
. 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.
-intensive applications, part of a series of projects including real-time ray tracing and 3D display walls. The main contributors to the project included Intel’s Performance Library Team, as well as a number of optimization experts in Intel Russia. In the early days of OpenCV, the goals of the project were described as
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 6 months.
To support some of the above areas, OpenCV includes a statistical machine learning
library that contains:
s. Wrappers for languages such as C#, Python
, Ruby
and Java
(using JavaCV) have been developed to encourage adoption by a wider audience.
However, since version 2.0, OpenCV includes both its traditional C interface as well as a new C++ interface, that seeks to reduce the number of lines of code necessary to code up vision functionality as well as reduce common programming errors
such as memory leak
s that can arise when using OpenCV in C. Most of the new developments and algorithms in OpenCV are now developed in the C++ interface. Unfortunately, it is much more difficult to provide wrappers in other languages to C++ code as opposed to C code; therefore the other language wrappers are generally lacking some of the newer OpenCV 2.0 features. A CUDA
-based GPU
interface has been in progress since September 2010.
, FreeBSD
, OpenBSD
, iOS, Linux
, Mac OS
and Windows
. The user can get official releases from SourceForge
, or take the current snapshot under SVN from there. OpenCV uses CMake
.
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.
Computer vision
Computer vision is a field that includes methods for acquiring, processing, analysing, and understanding images and, in general, high-dimensional data from the real world in order to produce numerical or symbolic information, e.g., in the forms of decisions...
, developed by Intel
Intel Corporation
Intel Corporation is an American multinational semiconductor chip maker corporation headquartered in Santa Clara, California, United States and the world's largest semiconductor chip maker, based on revenue. It is the inventor of the x86 series of microprocessors, the processors found in most...
and now supported by Willow Garage
Willow Garage
Willow Garage is a robotics research lab and technology incubator devoted to developing hardware and open source software for personal robotics applications. It was started in late 2006 by Scott Hassan, an early Google employee who helped develop Google's technology. Steve Cousins is the president...
. It is free for use under the open source
Open source
The term open source describes practices in production and development that promote access to the end product's source materials. Some consider open source a philosophy, others consider it a pragmatic methodology...
BSD license. The library is cross-platform
Cross-platform
In computing, cross-platform, or multi-platform, is an attribute conferred to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms...
. It focuses mainly on real-time image processing. If the library finds Intel's Integrated Performance Primitives
Integrated Performance Primitives
Intel Integrated Performance Primitives is a multi-threaded software library of functions for multimedia and data processing applications, produced by Intel....
on the system, it will use these proprietary optimized routines to accelerate itself.
History
Officially launched in 1999, the OpenCV project was initially an Intel Research initiative to advance CPUCentral processing unit
The central processing unit is the portion of a computer system that carries out the instructions of a computer program, to perform the basic arithmetical, logical, and input/output operations of the system. The CPU plays a role somewhat analogous to the brain in the computer. The term has been in...
-intensive applications, part of a series of projects including real-time ray tracing and 3D display walls. The main contributors to the project included Intel’s Performance Library Team, as well as a number of optimization experts in Intel Russia. 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
Conference on Computer Vision and Pattern Recognition
The Conference on Computer Vision and Pattern Recognition is the IEEE annual conference on computer vision and pattern recognition. It has an 'A' rating from the Australian Ranking of ICT Conferences....
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++
C++
C++ is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as an intermediate-level language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell...
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 6 months.
Applications
OpenCV's application areas include:- 2D and 3D feature toolkits
- EgomotionEgomotionEgomotion is defined as the 3D motion of a camera within an environment. In the field of computer vision, egomotion refers to estimating a camera's motion relative to a rigid scene. An example of egomotion estimation would be estimating a car's moving position relative to lines on the road or...
estimation - Facial recognition systemFacial recognition systemA facial recognition system is a computer application for automatically identifying or verifying a person from a digital image or a video frame from a video source...
- Gesture recognitionGesture recognitionGesture recognition is a topic in computer science and language technology with the goal of interpreting human gestures via mathematical algorithms. Gestures can originate from any bodily motion or state but commonly originate from the face or hand. Current focuses in the field include emotion...
- Human–computer interactionHuman–computer interactionHuman–computer Interaction is the study, planning, and design of the interaction between people and computers. It is often regarded as the intersection of computer science, behavioral sciences, design and several other fields of study...
(HCI) - Mobile robotics
- Motion understanding
- Object identification
- SegmentationSegmentation (image processing)In computer vision, segmentation refers to the process of partitioning a digital image into multiple segments . The goal of segmentation is to simplify and/or change the representation of an image into something that is more meaningful and easier to analyze...
and Recognition - StereopsisStereopsisStereopsis refers to impression of depth that is perceived when a scene is viewed with both eyes by someone with normal binocular vision. Binocular viewing of a scene creates two slightly different images of the scene in the two eyes due the the eyes' different positions on the head...
Stereo vision: depth perception from 2 cameras - Structure from motionStructure from motionIn computer vision structure from motion refers to the process of finding the three-dimensional structure of an object by analyzing local motion signals over time....
(SFM) - Motion trackingVideo trackingVideo tracking is the process of locating a moving object over time using a camera. It has a variety of uses, some of which are: human-computer interaction, security and surveillance, video communication and compression, augmented reality, traffic control, medical imaging and video editing...
To support some of the above areas, OpenCV includes a statistical machine learning
Machine learning
Machine learning, a branch of artificial intelligence, is a scientific discipline concerned with the design and development of algorithms that allow computers to evolve behaviors based on empirical data, such as from sensor data or databases...
library that contains:
- BoostingBoostingBoosting is a machine learning meta-algorithm for performing supervised learning. Boosting is based on the question posed by Kearns: can a set of weak learners create a single strong learner? A weak learner is defined to be a classifier which is only slightly correlated with the true classification...
- Decision tree learningDecision tree learningDecision tree learning, used in statistics, data mining and machine learning, uses a decision tree as a predictive model which maps observations about an item to conclusions about the item's target value. More descriptive names for such tree models are classification trees or regression trees...
- Gradient boostingGradient boostingGradient boosting is a machine learning technique for regression problems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees. It builds the model in a stage-wise fashion like other boosting methods do, and it generalizes them by...
trees - Expectation-maximization algorithmExpectation-maximization algorithmIn statistics, an expectation–maximization algorithm is an iterative method for finding maximum likelihood or maximum a posteriori estimates of parameters in statistical models, where the model depends on unobserved latent variables...
- k-nearest neighbor algorithmK-nearest neighbor algorithmIn pattern recognition, the k-nearest neighbor algorithm is a method for classifying objects based on closest training examples in the feature space. k-NN is a type of instance-based learning, or lazy learning where the function is only approximated locally and all computation is deferred until...
- Naive Bayes classifierNaive Bayes classifierA naive Bayes classifier is a simple probabilistic classifier based on applying Bayes' theorem with strong independence assumptions...
- Artificial neural networkArtificial neural networkAn artificial neural network , usually called neural network , is a mathematical model or computational model that is inspired by the structure and/or functional aspects of biological neural networks. A neural network consists of an interconnected group of artificial neurons, and it processes...
s - Random forestRandom forestRandom forest is an ensemble classifier that consists of many decision trees and outputs the class that is the mode of the class's output by individual trees. The algorithm for inducing a random forest was developed by Leo Breiman and Adele Cutler, and "Random Forests" is their trademark...
- Support vector machineSupport vector machineA support vector machine is a concept in statistics and computer science for a set of related supervised learning methods that analyze data and recognize patterns, used for classification and regression analysis...
(SVM)
Programming language
The library was originally written in C and this C interface makes OpenCV portable to some specific platforms such as digital signal processorDigital signal processor
A digital signal processor is a specialized microprocessor with an architecture optimized for the fast operational needs of digital signal processing.-Typical characteristics:...
s. Wrappers for languages such as C#, Python
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
, Ruby
Ruby (programming language)
Ruby is a dynamic, reflective, general-purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features. Ruby originated in Japan during the mid-1990s and was first developed and designed by Yukihiro "Matz" Matsumoto...
and Java
Java (programming language)
Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities...
(using JavaCV) have been developed to encourage adoption by a wider audience.
However, since version 2.0, OpenCV includes both its traditional C interface as well as a new C++ interface, that seeks to reduce the number of lines of code necessary to code up vision functionality as well as reduce common programming errors
Software bug
A software bug is the common term used to describe an error, flaw, mistake, failure, or fault in a computer program or system that produces an incorrect or unexpected result, or causes it to behave in unintended ways. Most bugs arise from mistakes and errors made by people in either a program's...
such as memory leak
Memory leak
A memory leak, in computer science , occurs when a computer program consumes memory but is unable to release it back to the operating system. In object-oriented programming, a memory leak happens when an object is stored in memory but cannot be accessed by the running code...
s that can arise when using OpenCV in C. Most of the new developments and algorithms in OpenCV are now developed in the C++ interface. Unfortunately, it is much more difficult to provide wrappers in other languages to C++ code as opposed to C code; therefore the other language wrappers are generally lacking some of the newer OpenCV 2.0 features. A CUDA
CUDA
CUDA or Compute Unified Device Architecture is a parallel computing architecture developed by Nvidia. CUDA is the computing engine in Nvidia graphics processing units that is accessible to software developers through variants of industry standard programming languages...
-based GPU
Graphics processing unit
A graphics processing unit or GPU is a specialized circuit designed to rapidly manipulate and alter memory in such a way so as to accelerate the building of images in a frame buffer intended for output to a display...
interface has been in progress since September 2010.
OS support
OpenCV runs on Android, MaemoMaemo
Maemo is a software platform developed by the Maemo community for smartphones and Internet tablets. It is based on the Debian Linux distribution, but has no relation to it...
, FreeBSD
FreeBSD
FreeBSD is a free Unix-like operating system descended from AT&T UNIX via BSD UNIX. Although for legal reasons FreeBSD cannot be called “UNIX”, as the direct descendant of BSD UNIX , FreeBSD’s internals and system APIs are UNIX-compliant...
, OpenBSD
OpenBSD
OpenBSD is a Unix-like computer operating system descended from Berkeley Software Distribution , a Unix derivative developed at the University of California, Berkeley. It was forked from NetBSD by project leader Theo de Raadt in late 1995...
, iOS, Linux
Linux
Linux is a Unix-like computer operating system assembled under the model of free and open source software development and distribution. The defining component of any Linux system is the Linux kernel, an operating system kernel first released October 5, 1991 by Linus Torvalds...
, Mac OS
Mac OS
Mac OS is a series of graphical user interface-based operating systems developed by Apple Inc. for their Macintosh line of computer systems. The Macintosh user experience is credited with popularizing the graphical user interface...
and Windows
Microsoft Windows
Microsoft Windows is a series of operating systems produced by Microsoft.Microsoft introduced an operating environment named Windows on November 20, 1985 as an add-on to MS-DOS in response to the growing interest in graphical user interfaces . Microsoft Windows came to dominate the world's personal...
. The user can get official releases from SourceForge
SourceForge
SourceForge Enterprise Edition is a collaborative revision control and software development management system. It provides a front-end to a range of software development lifecycle services and integrates with a number of free software / open source software applications .While originally itself...
, or take the current snapshot under SVN from there. OpenCV uses CMake
CMake
CMake is a cross-platform, open-source system for managing the build process of software using a compiler-independent method. It is designed to support directory hierarchies and applications that depend on multiple libraries, and for use in conjunction with native build environments such as Make,...
.
Windows prerequisites
The BaseClasses from DirectShowDirectShow
DirectShow , codename Quartz, is a multimedia framework and API produced by Microsoft for software developers to perform various operations with media files or streams. It is the replacement for Microsoft's earlier Video for Windows technology...
SDK is required to build some camera
Digital camera
A digital camera is a camera that takes video or still photographs, or both, digitally by recording images via an electronic image sensor. It is the main device used in the field of digital photography...
input-related parts of OpenCV on Windows. This SDK is found in the Samples\Multimedia\DirectShow\BaseClasses subdirectory of the Microsoft Platform SDK
Microsoft Platform SDK
Microsoft Windows SDK, Platform SDK, and .NET Framework SDK are software development kits from Microsoft that contain header files, libraries, samples, documentation and tools required to develop applications for Microsoft Windows and .NET Framework....
(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.
See also
- AForge.NETAForge.NETAForge.NET is a computer vision and artificial intelligence library originally developed by Andrew Kirillov for the .NET Framework.The source code and binaries of the project are available under the terms of the Lesser GPL license.-Features:...
, a computer vision library for the Common Language RuntimeCommon Language RuntimeThe Common Language Runtime is the virtual machine component of Microsoft's .NET framework and is responsible for managing the execution of .NET programs. In a process known as just-in-time compilation, the CLR compiles the intermediate language code known as CIL into the machine instructions...
(.NET Framework.NET FrameworkThe .NET Framework is a software framework that runs primarily on Microsoft Windows. It includes a large library and supports several programming languages which allows language interoperability...
and MonoMono (software)Mono, pronounced , is a free and open source project led by Xamarin to create an Ecma standard compliant .NET-compatible set of tools including, among others, a C# compiler and a Common Language Runtime....
). - ROS (Robot Operating System)ROS (Robot Operating System)Robot Operating System is a software framework for robot software development, providing operating system-like functionality on a heterogenous computer cluster. ROS was originally developed in 2007 under the name switchyard by the Stanford Artificial Intelligence Laboratory in support of the...
OpenCV is used as the primary vision package in ROS. - VXLVXLVXL, the Vision-something-Library,' is a collection of open source C++ libraries for Computer Vision. The idea is to replace X with one of many letters, ie. G is a geometry library, N is a numerics library, I is an image processing library, etc. These libraries can be used for general scientific...
, an alternative library written in C++. - Integrating Vision ToolkitIntegrating Vision ToolkitThe Integrating Vision Toolkit is a powerful and fast C++ computer vision library with an easy-to-use object-oriented architecture. It offers its own multi-platform GUI toolkit.- Availability :...
(IVT), a fast and easy-to-use C++ library with optional interface to the OpenCV.