April, 2012
As usual, we created 2.4 branch in our repository (http://code.opencv.org/svn/opencv/branches/2.4), where we will further stabilize the code. You can check this branch periodically, before as well as after 2.4 release.
Common changes¶
- At the age of 12, OpenCV got its own home! http://code.opencv.org is now the primary site for OpenCV development and http://opencv.org (to be launched soon) will be the official OpenCV user site.
- Some of the old functionality from the modules
imgproc
,video
,calib3d
,features2d
,objdetect
has been moved to legacy.
- CMake scripts have been substantially modified. Now it's very easy to add new modules - just put the directory with include, src, doc and test sub-directories to the modules directory, create a very simple
CMakeLists.txt
and your module will be built as a part of OpenCV. Also, it's possible to exclude certain modules from build (the CMake variables "BUILD_opencv_<modulename>
" control that).
New functionality¶
- The new very base
cv::Algorithm
class has been introduced. It's planned to be the base of all the "non-trivial" OpenCV functionality. All Algorithm-based classes have the following features:- "virtual constructor", i.e. an algorithm instance can be created by name;
- there is a list of available algorithms;
- one can retrieve and set algorithm parameters by name;
- one can save algorithm parameters to XML/YAML file and then load them.
- A new ffmpeg wrapper has been created that features multi-threaded decoding, more robust video positioning etc. It's used with ffmpeg starting with 0.7.x versions.
features2d
API has been cleaned up. There are no more numerous classes with duplicated functionality. The base classesFeatureDetector
andDescriptorExtractor
are now derivatives ofcv::Algorithm
. There is also the baseFeature2D
, using which you can detect keypoints and compute the descriptors in a single call. This is also more efficient.
- SIFT and SURF have been moved to a separate module named
nonfree
to indicate possible legal issues of using those algorithms in user applications. Also, SIFT performance has been substantially improved (by factor of 3-4x).
- The current state-of-art textureless detection algorithm, Line-Mod by S. Hinterstoisser, has been contributed by Patrick Mihelich. See
objdetect/objdetect.hpp
, classDetector
.
- 3 face recognition algorithms have been contributed by Philipp Wagner. Please, check
opencv/contrib/contrib.hpp
,FaceRecognizer
class, andopencv/samples/cpp/facerec_demo.cpp
.
- 2 algorithms for solving PnP problem have been added. Please, check
flags
parameter insolvePnP
andsolvePnPRansac
functions.
- Enhanced
LogPolar
implementation (that uses Blind-Spot model) has been contributed by Fabio Solari and Manuela Chessa, seeopencv/contrib/contrib.hpp
,LogPolar_*
classes andopencv/samples/cpp/logpolar_bsm.cpp
sample.
- A stub module
photo
has been created to support a quickly growing "computational photography" area. Currently, it only containsinpainting
algorithm, moved fromimgproc
, but it's planned to add much more functionality.
- Another module
videostab
(beta version) has been added that solves a specific yet very important task of video stabilization. The module is under active development. Please, checkopencv/samples/cpp/videostab.cpp
sample.
findContours
can now find contours on a 32-bit integer image of labels (not only on a black-and-white 8-bit image). This is a step towards more convenient connected component analysis.
Canny
edge detector can now be run on color images, which results in better edge maps
- Python bindings can now be used within python threads, so one can write multi-threaded computer vision applications in Python.
OpenCV on GPU¶
- Different Optical Flow algorithms have been added:
- Brox (contributed by NVidia)
- PyrLK - both Dense and Sparse variations
- Farneback
- New feature detectors and descriptors:
GoodFeaturesToTrack
- FAST/ORB which is patent free replacement of SURF.
- Overall GPU module enhancements:
- The module now requires CUDA 4.1 or later;
- Improved similarity of results between CPU and GPU;
- Added border extrapolation support for many functions;
- Improved performance.
pyrUp
/pyrDown
implementations.
- Matrix multiplication on GPU (wrapper for the CUBLAS library). This is optional, user need to compile OpenCV with CUBLAS support.
OpenGL back-end
has been implemented forhighgui
module, that allows to displayGpuMat
directly without downloading them to CPU.
OpenCV4Android¶
See the Android Release Notes.
Performance¶
- A few OpenCV functions, like color conversion, morphology, data type conversions, brute-force feature matcher have been optimized using TBB and/or SSE intrinisics.
- Along with regression tests, now many OpenCV functions have got performance tests. Now for most modules one can build
opencv_perf_<modulename>
executables that run various functions from the particular module and produce a XML file. Note that if you want to run those tests, as well as the normal regression tests, you will need to get (a rather big) http://code.opencv.org/svn/opencv/trunk/opencv_extra directory and set environment variableOPENCV_TEST_DATA_PATH
to "<your_copy_of_opencv_extra>/testdata
".
Bug fixes¶
- In this version we fixed literally hundreds of bugs. Please, check http://code.opencv.org/projects/opencv/versions/1 for a list of fixed bugs.
Known issues¶
- When OpenCV is built statically, dynamically created classes (via
Algorithm::create
) can fail because linker excludes the "unused" object files. To avoid this problem, create classes explicitly, e.g1 Ptr<DescriptorExtractor> d = new BriefDescriptorExtractor;