OpenCV 2.1 is basically a stabilized OpenCV 2.0, yet there are a few new features.
>>> General modifications
- SVN repository has been migrated from SourceForge to https://code.ros.org/svn/opencv.
The bug tracker has been moved to https://code.ros.org/trac/opencv/.
And we also have OpenCV twitter! http://twitter.com/opencvlibrary
- The whole OpenCV is now using exceptions instead of the old libc-style mechanism.
That is, instead of checking error code with cvGetErrStatus() (which currently always returns 0)
you can now just call OpenCV functions inside C++ try-catch statements,
cv::Exception is now derived from std::exception.
- OpenCV does not support autotools-based build scripts,
CMake (www.cmake.org) is the only way to build OpenCV on any OS.
See http://opencv.willowgarage.com/wiki/InstallGuide.
- All the parallel loops in OpenCV have been converted from OpenMP
to Intel TBB (http://www.threadingbuildingblocks.org/). Thus parallel version of OpenCV
can now be built using MSVC 2008 Express Edition or using earlier than 4.2 versions of GCC.
- SWIG-based Python wrappers are still included,
but they are not built by default and it's generally preferable to use the new wrappers.
The python samples have been rewritten by James Bowman to use the new-style Python wrappers,
which have been also created by James.
- OpenCV can now be built and run in 64-bit mode on MacOSX 10.6 and Windows (see HighGUI and known problems below).
On Windows both MSVC 2008 and mingw64 are known to work.
- In theory OpenCV is now able to determine the host CPU on-fly and make use of SSE/SSE2/... instructions,
if they are available. That is, it should be more safe to use WITH_SSE* flags in CMake.
However, if you want maximum portability, it's recommended to turn on just WITH_SSE and WITH_SSE2
and leave other SSE* turned off, as we found that using WITH_SSE3, WITH_SSSE3 and WITH_SSE4_1 can yield
the code incompatible with Intel's pre-Penryn or AMD chips.
- Experimental "static" OpenCV configuration in CMake was contributed by Jose Luis Blanco.
Pass "BUILD_SHARED_LIBS=OFF" to CMake to build OpenCV statically.
>>> New functionality, features:
- cxcore, cv, cvaux:
* Grabcut (http://en.wikipedia.org/wiki/GrabCut) image segmentation algorithm has been implemented.
See opencv/samples/c/grabcut.cpp
* new improved version of one-way descriptor is added. See opencv/samples/c/one_way_sample.cpp
* modified version of H. Hirschmuller semi-global stereo matching algorithm that we call SGBM
(semi-global block matching) has been created. It is much faster than Kolmogorov's graph
cuts-based algorithm and yet it's usually better than the block matching StereoBM algorithm.
See opencv/samples/c/stereo_matching.cpp.
* existing StereoBM stereo correspondence algorithm by K. Konolige was noticeably improved:
added the optional left-right consistency check and speckle filtering,
improved performance (by ~20%).
* User can now control the image areas visible after the stereo rectification
(see the extended stereoRectify/cvStereoRectify), and also limit the region
where the disparity is computed (see CvStereoBMState::roi1, roi2; getValidDisparityROI).
* Mixture-of-Gaussian based background subtraction algorithm has been rewritten for better performance
and better accuracy. Alternative C++ interface BackgroundSubtractor has been provided,
along with the possibility to use the trained background model to segment the foreground
without updating the model. See opencv/samples/c/bgfg_segm.cpp.
- highgui:
* MacOSX: OpenCV now includes Cocoa and QTKit backends, in addition to Carbon and Quicktime.
Therefore you can build OpenCV as 64-bit library. Thanks to Andre Cohen and Nicolas Butko, which components
Note however that the backend are now in the alpha state, they can crash or leak memory,
so for anything more serious than quick experiments you may prefer to use Carbon and Quicktime.
To do that, pass USE_CARBON=ON and USE_QUICKTIME=ON to CMake and build OpenCV in 32-bit mode
(i.e. select i386 architecture in Xcode).
* Windows. OpenCV can now be built in 64-bit mode with MSVC 2008 and also mingw64.
* Fullscreen has been added (thanks to Yannick Verdie).
Call cvSetWindowProperty(window_name, CV_WINDOW_FULLSCREEN, 1) to make the particular window
to fill the whole screen. This feature is not supported in the Cocoa bindings yet.
* gstreamer backend has been improved a lot (thanks to Stefano Fabri)
>>> New tests:
- A few dozens of new tests have been written and many existing tests have been extended
to verify OpenCV correctness thoroughly. As a result, we brought the test coverage from
rather mediocre numbers to pretty impressive ones (especially for cxcore and cv)!
Module OpenCV 2.0 coverage OpenCV 2.1
(functions/conditions) (functions/conditions)
cxcore 65/54 91/73
cv 52/46 80/68
ml 66/47 73/52
highgui 17/3 54/27
cvaux 0/0 5/12
- Many new regression tests have been written in Python that check both OpenCV and the new-style bindings.
- The test data moved to the separate repository: https://code.ros.org/svn/opencv/trunk/opencv_extra/testdata.
And it is not included into the package, thus some tests from the cvtest and mltest will report about the missing data.
You can download the directory to your hard drive and run cvtest like:
./cvtest -d <path_to_opencv_extra>/testdata/cv
./mltest -d <path_to_opencv_extra>/testdata/ml
- The test engine has been improved:
added flags -tn, -seed, -r
the detailed information about failed tests is displayed right in the console.
>>> Bug fixes:
- about 200 bugs have been fixed. For the list of closed and still open bugs, please look at
https://code.ros.org/trac/opencv/report and
http://sourceforge.net/tracker/?group_id=22870&atid=376677.
>>> Known problems/limitations.
- there are some sporadic test failures on different platforms.
Most probably they are caused by some very special test cases
(that are usually generated randomly on each test run) and the test cases
are not properly handled by the functions or by the tests.
Some of the tests have been reproduced and reported here:
https://code.ros.org/trac/opencv/ticket/29
https://code.ros.org/trac/opencv/ticket/113
https://code.ros.org/trac/opencv/ticket/114
- the new Python bindings do not include interface for the new C++ functionality and MLL.
this is going to be addressed in some special intermediate OpenCV release
- documentation is also incomplete at the moment and there are occasional formatting,
grammar and semantical errors.
We continue to improve it on a regular basis. Please, check the up-to-date online
documentation at:
http://opencv.willowgarage.com/documentation/c/index.html (C)
http://opencv.willowgarage.com/documentation/cpp/index.html (C++)
http://opencv.willowgarage.com/documentation/python/index.html (Python)
- please also check the list of open bugs at
https://code.ros.org/trac/opencv/report and
http://sourceforge.net/tracker/?group_id=22870&atid=376677.
April, 2010