From b368f99d03e317ed0977adb770ff17310e0338b5 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Mon, 2 Jul 2012 11:04:43 +0000 Subject: [PATCH] Merged the trunk r8852:8880 --- cmake/OpenCVDetectCXXCompiler.cmake | 2 +- modules/calib3d/src/calibration.cpp | 2 +- modules/calib3d/src/fundam.cpp | 2 + modules/core/include/opencv2/core/core.hpp | 1 + modules/core/include/opencv2/core/eigen.hpp | 1 + modules/core/include/opencv2/core/operations.hpp | 31 +++- modules/core/src/algorithm.cpp | 3 +- modules/core/test/test_operations.cpp | 31 +++- modules/features2d/src/descriptors.cpp | 34 ++--- modules/features2d/src/freak.cpp | 20 +-- modules/features2d/test/test_features2d.cpp | 2 +- modules/features2d/test/test_mser.cpp | 2 +- modules/highgui/src/cap_dshow.cpp | 2 +- modules/highgui/src/precomp.hpp | 2 + modules/highgui/src/window.cpp | 4 + modules/highgui/src/window_cocoa.mm | 82 ++++++++++- modules/java/CMakeLists.txt | 3 +- modules/java/android_lib/.project | 2 +- modules/ml/src/boost.cpp | 2 +- modules/stitching/src/matchers.cpp | 36 ++--- modules/video/src/precomp.hpp | 2 + samples/android/15-puzzle/.project | 66 ++++----- samples/android/15-puzzle/res/drawable/icon.png | Bin 5760 -> 1997 bytes samples/android/15-puzzle/res/values/strings.xml | 2 +- samples/android/color-blob-detection/.project | 2 +- .../color-blob-detection/AndroidManifest.xml | 2 +- .../res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 0 bytes .../res/drawable-ldpi/ic_launcher.png | Bin 2729 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 0 bytes .../color-blob-detection/res/drawable/icon.png | Bin 0 -> 1997 bytes .../color-blob-detection/res/layout/main.xml | 12 -- .../color-blob-detection/res/values/strings.xml | 5 +- samples/android/face-detection/.project | 2 +- .../android/face-detection/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../android/face-detection/res/values/strings.xml | 2 +- samples/android/image-manipulations/.project | 2 +- .../image-manipulations/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../image-manipulations/res/values/strings.xml | 2 +- samples/android/tutorial-0-androidcamera/.project | 66 ++++----- .../tutorial-0-androidcamera/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../res/values/strings.xml | 2 +- samples/android/tutorial-1-addopencv/.project | 2 +- .../tutorial-1-addopencv/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../tutorial-1-addopencv/res/values/strings.xml | 2 +- samples/android/tutorial-2-opencvcamera/.project | 2 +- .../tutorial-2-opencvcamera/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../tutorial-2-opencvcamera/res/values/strings.xml | 2 +- samples/android/tutorial-3-native/.project | 2 +- .../tutorial-3-native/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../tutorial-3-native/res/values/strings.xml | 2 +- samples/android/tutorial-4-mixed/.project | 2 +- .../android/tutorial-4-mixed/res/drawable/icon.png | Bin 5760 -> 1997 bytes .../tutorial-4-mixed/res/values/strings.xml | 2 +- samples/cpp/bagofwords_classification.cpp | 11 +- samples/python2/digits.py | 3 +- samples/python2/digits_adjust.py | 160 ++++++++++++--------- samples/python2/fitline.py | 78 ++++++++++ samples/python2/video.py | 38 ++++- samples/python2/watershed.py | 29 ++-- 60 files changed, 509 insertions(+), 257 deletions(-) delete mode 100644 samples/android/color-blob-detection/res/drawable-hdpi/ic_launcher.png delete mode 100644 samples/android/color-blob-detection/res/drawable-ldpi/ic_launcher.png delete mode 100644 samples/android/color-blob-detection/res/drawable-mdpi/ic_launcher.png delete mode 100644 samples/android/color-blob-detection/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/android/color-blob-detection/res/drawable/icon.png delete mode 100644 samples/android/color-blob-detection/res/layout/main.xml create mode 100644 samples/python2/fitline.py diff --git a/cmake/OpenCVDetectCXXCompiler.cmake b/cmake/OpenCVDetectCXXCompiler.cmake index 1c4746c..5bce4a8 100644 --- a/cmake/OpenCVDetectCXXCompiler.cmake +++ b/cmake/OpenCVDetectCXXCompiler.cmake @@ -89,7 +89,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() endif() -if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64.*|x86_64.*) +if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64.*|x86_64.* OR CMAKE_GENERATOR MATCHES "Visual Studio.*Win64") set(X86_64 1) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES i686.*|i386.*|x86.*) set(X86 1) diff --git a/modules/calib3d/src/calibration.cpp b/modules/calib3d/src/calibration.cpp index ffe1c58..94be4ce 100644 --- a/modules/calib3d/src/calibration.cpp +++ b/modules/calib3d/src/calibration.cpp @@ -2608,7 +2608,7 @@ void cvGetOptimalNewCameraMatrix( const CvMat* cameraMatrix, const CvMat* distCo if( validPixROI ) { - icvGetRectangles( cameraMatrix, distCoeffs, 0, newCameraMatrix, imgSize, inner, outer ); + icvGetRectangles( cameraMatrix, distCoeffs, 0, &matM, imgSize, inner, outer ); cv::Rect r = inner; r &= cv::Rect(0, 0, newImgSize.width, newImgSize.height); *validPixROI = r; diff --git a/modules/calib3d/src/fundam.cpp b/modules/calib3d/src/fundam.cpp index 7b6ce7b..1515433 100644 --- a/modules/calib3d/src/fundam.cpp +++ b/modules/calib3d/src/fundam.cpp @@ -1128,6 +1128,8 @@ void cv::computeCorrespondEpilines( InputArray _points, int whichImage, { Mat points = _points.getMat(), F = _Fmat.getMat(); int npoints = points.checkVector(2); + if( npoints < 0 ) + npoints = points.checkVector(3); CV_Assert( npoints >= 0 && (points.depth() == CV_32F || points.depth() == CV_32S)); _lines.create(npoints, 1, CV_32FC3, -1, true); diff --git a/modules/core/include/opencv2/core/core.hpp b/modules/core/include/opencv2/core/core.hpp index d3f173d..a44e0d1 100644 --- a/modules/core/include/opencv2/core/core.hpp +++ b/modules/core/include/opencv2/core/core.hpp @@ -1249,6 +1249,7 @@ public: ~Ptr(); //! copy constructor. Copies the members and calls addref() Ptr(const Ptr& ptr); + template Ptr(const Ptr<_Tp2>& ptr); //! copy operator. Calls ptr.addref() and release() before copying the members Ptr& operator = (const Ptr& ptr); //! increments the reference counter diff --git a/modules/core/include/opencv2/core/eigen.hpp b/modules/core/include/opencv2/core/eigen.hpp index 5a7efe2..ea47e8b 100644 --- a/modules/core/include/opencv2/core/eigen.hpp +++ b/modules/core/include/opencv2/core/eigen.hpp @@ -51,6 +51,7 @@ #if defined _MSC_VER && _MSC_VER >= 1200 #pragma warning( disable: 4714 ) //__forceinline is not inlined #pragma warning( disable: 4127 ) //conditional expression is constant +#pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data #endif namespace cv diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp index 1f96722..fe9caa4 100644 --- a/modules/core/include/opencv2/core/operations.hpp +++ b/modules/core/include/opencv2/core/operations.hpp @@ -2642,14 +2642,35 @@ template inline Ptr<_Tp>::operator const _Tp*() const { return obj template inline bool Ptr<_Tp>::empty() const { return obj == 0; } +template template Ptr<_Tp>::Ptr(const Ptr<_Tp2>& p) + : obj(0), refcount(0) +{ + if (p.empty()) + return; + + _Tp* p_casted = dynamic_cast<_Tp*>(p.obj); + if (!p_casted) + return; + + obj = p_casted; + refcount = p.refcount; + addref(); +} + template template inline Ptr<_Tp2> Ptr<_Tp>::ptr() { Ptr<_Tp2> p; if( !obj ) return p; + + _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj); + if (!obj_casted) + return p; + if( refcount ) CV_XADD(refcount, 1); - p.obj = dynamic_cast<_Tp2*>(obj); + + p.obj = obj_casted; p.refcount = refcount; return p; } @@ -2659,9 +2680,15 @@ template template inline const Ptr<_Tp2> Ptr<_Tp>:: Ptr<_Tp2> p; if( !obj ) return p; + + _Tp2* obj_casted = dynamic_cast<_Tp2*>(obj); + if (!obj_casted) + return p; + if( refcount ) CV_XADD(refcount, 1); - p.obj = dynamic_cast<_Tp2*>(obj); + + p.obj = obj_casted; p.refcount = refcount; return p; } diff --git a/modules/core/src/algorithm.cpp b/modules/core/src/algorithm.cpp index 7c783ea..3fedfaa 100644 --- a/modules/core/src/algorithm.cpp +++ b/modules/core/src/algorithm.cpp @@ -321,7 +321,8 @@ AlgorithmInfo::AlgorithmInfo(const string& _name, Algorithm::Constructor create) { data = new AlgorithmInfoData; data->_name = _name; - alglist().add(_name, create); + if (!alglist().find(_name, create)) + alglist().add(_name, create); } AlgorithmInfo::~AlgorithmInfo() diff --git a/modules/core/test/test_operations.cpp b/modules/core/test/test_operations.cpp index b7440b0..0c4a6de 100644 --- a/modules/core/test/test_operations.cpp +++ b/modules/core/test/test_operations.cpp @@ -917,6 +917,25 @@ bool CV_OperationsTest::operations1() if (!v10dzero[ii] == 0.0) throw test_excep(); } + + Mat A(1, 32, CV_32F), B; + for( int i = 0; i < A.cols; i++ ) + A.at(i) = (float)(i <= 12 ? i : 24 - i); + transpose(A, B); + + int minidx[2] = {0, 0}, maxidx[2] = {0, 0}; + double minval = 0, maxval = 0; + minMaxIdx(A, &minval, &maxval, minidx, maxidx); + + if( !(minidx[0] == 0 && minidx[1] == 31 && maxidx[0] == 0 && maxidx[1] == 12 && + minval == -7 && maxval == 12)) + throw test_excep(); + + minMaxIdx(B, &minval, &maxval, minidx, maxidx); + + if( !(minidx[0] == 31 && minidx[1] == 0 && maxidx[0] == 12 && maxidx[1] == 0 && + minval == -7 && maxval == 12)) + throw test_excep(); } catch(const test_excep&) { @@ -946,13 +965,13 @@ bool CV_OperationsTest::TestSVD() Mat Q(3,3,CV_32FC1); Mat U,Vt,R,T,W; - Dp.at(0,0)=0.86483884; Dp.at(0,1)= -0.3077251; Dp.at(0,2)=-0.55711365; - Dp.at(1,0)=0.49294353; Dp.at(1,1)=-0.24209651; Dp.at(1,2)=-0.25084701; - Dp.at(2,0)=0; Dp.at(2,1)=0; Dp.at(2,2)=0; + Dp.at(0,0)=0.86483884f; Dp.at(0,1)= -0.3077251f; Dp.at(0,2)=-0.55711365f; + Dp.at(1,0)=0.49294353f; Dp.at(1,1)=-0.24209651f; Dp.at(1,2)=-0.25084701f; + Dp.at(2,0)=0; Dp.at(2,1)=0; Dp.at(2,2)=0; - Dc.at(0,0)=0.75632739; Dc.at(0,1)= -0.38859656; Dc.at(0,2)=-0.36773083; - Dc.at(1,0)=0.9699229; Dc.at(1,1)=-0.49858192; Dc.at(1,2)=-0.47134098; - Dc.at(2,0)=0.10566688; Dc.at(2,1)=-0.060333252; Dc.at(2,2)=-0.045333147; + Dc.at(0,0)=0.75632739f; Dc.at(0,1)= -0.38859656f; Dc.at(0,2)=-0.36773083f; + Dc.at(1,0)=0.9699229f; Dc.at(1,1)=-0.49858192f; Dc.at(1,2)=-0.47134098f; + Dc.at(2,0)=0.10566688f; Dc.at(2,1)=-0.060333252f; Dc.at(2,2)=-0.045333147f; Q=Dp*Dc.t(); SVD decomp; diff --git a/modules/features2d/src/descriptors.cpp b/modules/features2d/src/descriptors.cpp index 2fb43b7..a06fd8f 100644 --- a/modules/features2d/src/descriptors.cpp +++ b/modules/features2d/src/descriptors.cpp @@ -134,49 +134,43 @@ static void convertBGRImageToOpponentColorSpace( const Mat& bgrImage, vector rIt = bgrChannels[2].begin(); MatConstIterator_ gIt = bgrChannels[1].begin(); MatIterator_ dstIt = opponentChannels[0].begin(); - float factor = 1.f / sqrt(2.f); for( ; dstIt != opponentChannels[0].end(); ++rIt, ++gIt, ++dstIt ) { - int value = static_cast( static_cast(static_cast(*gIt)-static_cast(*rIt)) * factor ); - if( value < 0 ) value = 0; - if( value > 255 ) value = 255; - (*dstIt) = static_cast(value); + float value = 0.5f * (static_cast(*gIt) - + static_cast(*rIt) + 255); + (*dstIt) = static_cast(value + 0.5f); } } { - // (R + G - 2B)/sqrt(6) + // (R + G - 2B)/sqrt(6), but converted to the destination data type MatConstIterator_ rIt = bgrChannels[2].begin(); MatConstIterator_ gIt = bgrChannels[1].begin(); MatConstIterator_ bIt = bgrChannels[0].begin(); MatIterator_ dstIt = opponentChannels[1].begin(); - float factor = 1.f / sqrt(6.f); for( ; dstIt != opponentChannels[1].end(); ++rIt, ++gIt, ++bIt, ++dstIt ) { - int value = static_cast( static_cast(static_cast(*rIt) + static_cast(*gIt) - 2*static_cast(*bIt)) * - factor ); - if( value < 0 ) value = 0; - if( value > 255 ) value = 255; - (*dstIt) = static_cast(value); + float value = 0.25f * (static_cast(*rIt) + static_cast(*gIt) - + 2*static_cast(*bIt) + 510); + (*dstIt) = static_cast(value + 0.5f); } } { - // (R + G + B)/sqrt(3) + // (R + G + B)/sqrt(3), but converted to the destination data type MatConstIterator_ rIt = bgrChannels[2].begin(); MatConstIterator_ gIt = bgrChannels[1].begin(); MatConstIterator_ bIt = bgrChannels[0].begin(); MatIterator_ dstIt = opponentChannels[2].begin(); - float factor = 1.f / sqrt(3.f); + float factor = 1.f/3.f; for( ; dstIt != opponentChannels[2].end(); ++rIt, ++gIt, ++bIt, ++dstIt ) { - int value = static_cast( static_cast(static_cast(*rIt) + static_cast(*gIt) + static_cast(*bIt)) * - factor ); - if( value < 0 ) value = 0; - if( value > 255 ) value = 255; - (*dstIt) = static_cast(value); + float value = factor * (static_cast(*rIt) + + static_cast(*gIt) + + static_cast(*bIt)); + (*dstIt) = static_cast(value + 0.5f); } } } diff --git a/modules/features2d/src/freak.cpp b/modules/features2d/src/freak.cpp index c06c351..fe7b59c 100644 --- a/modules/features2d/src/freak.cpp +++ b/modules/features2d/src/freak.cpp @@ -274,14 +274,14 @@ void FREAK::computeImpl( const Mat& image, std::vector& keypoints, Mat // allocate descriptor memory, estimate orientations, extract descriptors if( !extAll ) { // extract the best comparisons only - descriptors = cv::Mat::zeros(keypoints.size(), FREAK_NB_PAIRS/8, CV_8U); + descriptors = cv::Mat::zeros((int)keypoints.size(), FREAK_NB_PAIRS/8, CV_8U); #if CV_SSE2 __m128i* ptr= (__m128i*) (descriptors.data+(keypoints.size()-1)*descriptors.step[0]); // binary: 10000000 => char: 128 or hex: 0x80 - const __m128i binMask = _mm_set_epi8(0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80); + const __m128i binMask = _mm_set_epi8('\x80', '\x80', '\x80', '\x80', + '\x80', '\x80', '\x80', '\x80', + '\x80', '\x80', '\x80', '\x80', + '\x80', '\x80', '\x80', '\x80'); #else std::bitset* ptr = (std::bitset*) (descriptors.data+(keypoints.size()-1)*descriptors.step[0]); #endif @@ -390,7 +390,7 @@ void FREAK::computeImpl( const Mat& image, std::vector& keypoints, Mat } } else { // extract all possible comparisons for selection - descriptors = cv::Mat::zeros(keypoints.size(), 128, CV_8U); + descriptors = cv::Mat::zeros((int)keypoints.size(), 128, CV_8U); std::bitset<1024>* ptr = (std::bitset<1024>*) (descriptors.data+(keypoints.size()-1)*descriptors.step[0]); for( size_t k = keypoints.size(); k--; ) { @@ -522,16 +522,16 @@ vector FREAK::selectPairs(const std::vector& images Mat descriptorsFloat = Mat::zeros(descriptors.rows, 903, CV_32F); std::bitset<1024>* ptr = (std::bitset<1024>*) (descriptors.data+(descriptors.rows-1)*descriptors.step[0]); - for( size_t m = descriptors.rows; m--; ) { - for( size_t n = 903; n--; ) { + for( int m = descriptors.rows; m--; ) { + for( int n = 903; n--; ) { if( ptr->test(n) == true ) - descriptorsFloat.at(m,n)=1.0; + descriptorsFloat.at(m,n)=1.0f; } --ptr; } std::vector pairStat; - for( size_t n = 903; n--; ) { + for( int n = 903; n--; ) { // the higher the variance, the better --> mean = 0.5 PairStat tmp = { fabs( mean(descriptorsFloat.col(n))[0]-0.5 ) ,n}; pairStat.push_back(tmp); diff --git a/modules/features2d/test/test_features2d.cpp b/modules/features2d/test/test_features2d.cpp index f208739..aad5a30 100644 --- a/modules/features2d/test/test_features2d.cpp +++ b/modules/features2d/test/test_features2d.cpp @@ -997,7 +997,7 @@ TEST( Features2d_Detector_Harris, regression ) test.safe_run(); } -TEST( Features2d_Detector_MSER, regression ) +TEST( Features2d_Detector_MSER, DISABLED_regression ) { CV_FeatureDetectorTest test( "detector-mser", FeatureDetector::create("MSER") ); test.safe_run(); diff --git a/modules/features2d/test/test_mser.cpp b/modules/features2d/test/test_mser.cpp index 316bc0f..b30400a 100644 --- a/modules/features2d/test/test_mser.cpp +++ b/modules/features2d/test/test_mser.cpp @@ -203,5 +203,5 @@ void CV_MserTest::run(int) } } -TEST(Features2d_MSER, regression) { CV_MserTest test; test.safe_run(); } +TEST(Features2d_MSER, DISABLED_regression) { CV_MserTest test; test.safe_run(); } diff --git a/modules/highgui/src/cap_dshow.cpp b/modules/highgui/src/cap_dshow.cpp index a177e72..49c8463 100644 --- a/modules/highgui/src/cap_dshow.cpp +++ b/modules/highgui/src/cap_dshow.cpp @@ -3278,7 +3278,7 @@ bool CvCaptureCAM_DShow::setProperty( int property_id, double value ) case CV_CAP_PROP_FPS: int fps = cvRound(value); - if (fps != VI.getFPS(0)) + if (fps != VI.getFPS(index)) { VI.stopDevice(index); VI.setIdealFramerate(index,fps); diff --git a/modules/highgui/src/precomp.hpp b/modules/highgui/src/precomp.hpp index eca4ce1..334a097 100644 --- a/modules/highgui/src/precomp.hpp +++ b/modules/highgui/src/precomp.hpp @@ -172,10 +172,12 @@ CvVideoWriter* cvCreateVideoWriter_GStreamer( const char* filename, int fourcc, void cvSetModeWindow_W32(const char* name, double prop_value); void cvSetModeWindow_GTK(const char* name, double prop_value); void cvSetModeWindow_CARBON(const char* name, double prop_value); +void cvSetModeWindow_COCOA(const char* name, double prop_value); double cvGetModeWindow_W32(const char* name); double cvGetModeWindow_GTK(const char* name); double cvGetModeWindow_CARBON(const char* name); +double cvGetModeWindow_COCOA(const char* name); double cvGetPropWindowAutoSize_W32(const char* name); double cvGetPropWindowAutoSize_GTK(const char* name); diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index 28ed2f1..4e94566 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -62,6 +62,8 @@ CV_IMPL void cvSetWindowProperty(const char* name, int prop_id, double prop_valu cvSetModeWindow_GTK(name,prop_value); #elif defined (HAVE_CARBON) cvSetModeWindow_CARBON(name,prop_value); + #elif defined (HAVE_COCOA) + cvSetModeWindow_COCOA(name,prop_value); #endif break; @@ -99,6 +101,8 @@ CV_IMPL double cvGetWindowProperty(const char* name, int prop_id) return cvGetModeWindow_GTK(name); #elif defined (HAVE_CARBON) return cvGetModeWindow_CARBON(name); + #elif defined (HAVE_COCOA) + return cvGetModeWindow_COCOA(name); #else return -1; #endif diff --git a/modules/highgui/src/window_cocoa.mm b/modules/highgui/src/window_cocoa.mm index d72c721..20e0b1c 100644 --- a/modules/highgui/src/window_cocoa.mm +++ b/modules/highgui/src/window_cocoa.mm @@ -109,13 +109,15 @@ static bool wasInitialized = false; CvMouseCallback mouseCallback; void *mouseParam; BOOL autosize; - BOOL firstContent; + BOOL firstContent; + int status; } @property(assign) CvMouseCallback mouseCallback; @property(assign) void *mouseParam; @property(assign) BOOL autosize; @property(assign) BOOL firstContent; @property(retain) NSMutableDictionary *sliders; +@property(readwrite) int status; - (CVView *)contentView; - (void)cvSendMouseEvent:(NSEvent *)event type:(int)type flags:(int)flags; - (void)cvMouseEvent:(NSEvent *)event; @@ -533,6 +535,75 @@ CV_IMPL int cvWaitKey (int maxWait) return returnCode; } +double cvGetModeWindow_COCOA( const char* name ) +{ + double result = -1; + CVWindow *window = nil; + + CV_FUNCNAME( "cvGetModeWindow_COCOA" ); + + __BEGIN__; + if( name == NULL ) + { + CV_ERROR( CV_StsNullPtr, "NULL name string" ); + } + + window = cvGetWindow( name ); + if ( window == NULL ) + { + CV_ERROR( CV_StsNullPtr, "NULL window" ); + } + + result = window.status; + + __END__; + return result; +} + +void cvSetModeWindow_COCOA( const char* name, double prop_value ) +{ + CVWindow *window = nil; + NSDictionary *fullscreenOptions = nil; + NSAutoreleasePool* localpool = nil; + + CV_FUNCNAME( "cvSetModeWindow_COCOA" ); + + __BEGIN__; + if( name == NULL ) + { + CV_ERROR( CV_StsNullPtr, "NULL name string" ); + } + + window = cvGetWindow(name); + if ( window == NULL ) + { + CV_ERROR( CV_StsNullPtr, "NULL window" ); + } + + if ( [window autosize] ) + { + return; + } + + localpool = [[NSAutoreleasePool alloc] init]; + + fullscreenOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSFullScreenModeSetting]; + if ( [[window contentView] isInFullScreenMode] && prop_value==CV_WINDOW_NORMAL ) + { + [[window contentView] exitFullScreenModeWithOptions:fullscreenOptions]; + window.status=CV_WINDOW_NORMAL; + } + else if( ![[window contentView] isInFullScreenMode] && prop_value==CV_WINDOW_FULLSCREEN ) + { + [[window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:fullscreenOptions]; + window.status=CV_WINDOW_FULLSCREEN; + } + + [localpool drain]; + + __END__; +} + @implementation CVWindow @synthesize mouseCallback; @@ -540,6 +611,7 @@ CV_IMPL int cvWaitKey (int maxWait) @synthesize autosize; @synthesize firstContent; @synthesize sliders; +@synthesize status; - (void)cvSendMouseEvent:(NSEvent *)event type:(int)type flags:(int)flags { //cout << "cvSendMouseEvent" << endl; @@ -787,9 +859,11 @@ CV_IMPL int cvWaitKey (int maxWait) NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; CVWindow *cvwindow = (CVWindow *)[self window]; int height = 0; - for(NSString *key in [cvwindow sliders]) { - height += [[[cvwindow sliders] valueForKey:key] frame].size.height; - } + if ([cvwindow respondsToSelector:@selector(sliders)]) { + for(NSString *key in [cvwindow sliders]) { + height += [[[cvwindow sliders] valueForKey:key] frame].size.height; + } + } NSRect imageRect = {{0,0}, {[image size].width, [image size].height}}; diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index 278ee8a..3d1c087 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -151,14 +151,13 @@ add_custom_target(${api_target} DEPENDS ${java_files} ${documented_java_files} $ add_library(${the_module} SHARED ${handwrittren_h_sources} ${handwrittren_cpp_sources} ${generated_cpp_sources}) if(BUILD_FAT_JAVA_LIB) set(__deps ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_MODULES_BUILD}) - list(REMOVE_ITEM __deps ${the_module}) + list(REMOVE_ITEM __deps ${the_module} opencv_ts) ocv_list_unique(__deps) set(__extradeps ${__deps}) ocv_list_filterout(__extradeps "^opencv_") if(__extradeps) list(REMOVE_ITEM __deps ${__extradeps}) endif() - target_link_libraries(${the_module} -Wl,-whole-archive ${__deps} -Wl,-no-whole-archive ${__extradeps} ${OPENCV_LINKER_LIBS}) else() target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS}) diff --git a/modules/java/android_lib/.project b/modules/java/android_lib/.project index 559d17b..7637a11 100644 --- a/modules/java/android_lib/.project +++ b/modules/java/android_lib/.project @@ -1,6 +1,6 @@ - OpenCV-2.4.2 + OpenCV Library-2.4.2 diff --git a/modules/ml/src/boost.cpp b/modules/ml/src/boost.cpp index 447a998..d720627 100644 --- a/modules/ml/src/boost.cpp +++ b/modules/ml/src/boost.cpp @@ -1896,7 +1896,7 @@ void CvBoost::write_params( CvFileStorage* fs ) const else cvWriteInt( fs, "splitting_criteria", params.split_criteria ); - cvWriteInt( fs, "ntrees", params.weak_count ); + cvWriteInt( fs, "ntrees", weak->total ); cvWriteReal( fs, "weight_trimming_rate", params.weight_trim_rate ); data->write_params( fs ); diff --git a/modules/stitching/src/matchers.cpp b/modules/stitching/src/matchers.cpp index d7e89c5..682580b 100644 --- a/modules/stitching/src/matchers.cpp +++ b/modules/stitching/src/matchers.cpp @@ -273,14 +273,14 @@ namespace cv { namespace detail { void FeaturesFinder::operator ()(const Mat &image, ImageFeatures &features) -{ +{ find(image, features); features.img_size = image.size(); } void FeaturesFinder::operator ()(const Mat &image, ImageFeatures &features, const vector &rois) -{ +{ vector roi_features(rois.size()); size_t total_kps_count = 0; int total_descriptors_height = 0; @@ -294,8 +294,8 @@ void FeaturesFinder::operator ()(const Mat &image, ImageFeatures &features, cons features.img_size = image.size(); features.keypoints.resize(total_kps_count); - features.descriptors.create(total_descriptors_height, - roi_features[0].descriptors.cols, + features.descriptors.create(total_descriptors_height, + roi_features[0].descriptors.cols, roi_features[0].descriptors.type()); int kp_idx = 0; @@ -332,14 +332,14 @@ SurfFeaturesFinder::SurfFeaturesFinder(double hess_thresh, int num_octaves, int { detector_ = Algorithm::create("Feature2D.SURF"); extractor_ = Algorithm::create("Feature2D.SURF"); - + if( detector_.empty() || extractor_.empty() ) CV_Error( CV_StsNotImplemented, "OpenCV was built without SURF support" ); - + detector_->set("hessianThreshold", hess_thresh); detector_->set("nOctaves", num_octaves); detector_->set("nOctaveLayers", num_layers); - + extractor_->set("nOctaves", num_octaves_descr); extractor_->set("nOctaveLayers", num_layers_descr); } @@ -403,17 +403,17 @@ void OrbFeaturesFinder::find(const Mat &image, ImageFeatures &features) int xr = (c+1) * gray_image.cols / grid_size.width; int yr = (r+1) * gray_image.rows / grid_size.height; - LOGLN("OrbFeaturesFinder::find: gray_image.empty=" << (gray_image.empty()?"true":"false") << ", " - << " gray_image.size()=(" << gray_image.size().width << "x" << gray_image.size().height << "), " - << " yl=" << yl << ", yr=" << yr << ", " - << " xl=" << xl << ", xr=" << xr << ", gray_image.data=" << ((size_t)gray_image.data) << ", " - << "gray_image.dims=" << gray_image.dims << "\n"); + // LOGLN("OrbFeaturesFinder::find: gray_image.empty=" << (gray_image.empty()?"true":"false") << ", " + // << " gray_image.size()=(" << gray_image.size().width << "x" << gray_image.size().height << "), " + // << " yl=" << yl << ", yr=" << yr << ", " + // << " xl=" << xl << ", xr=" << xr << ", gray_image.data=" << ((size_t)gray_image.data) << ", " + // << "gray_image.dims=" << gray_image.dims << "\n"); Mat gray_image_part=gray_image(Range(yl, yr), Range(xl, xr)); - LOGLN("OrbFeaturesFinder::find: gray_image_part.empty=" << (gray_image_part.empty()?"true":"false") << ", " - << " gray_image_part.size()=(" << gray_image_part.size().width << "x" << gray_image_part.size().height << "), " - << " gray_image_part.dims=" << gray_image_part.dims << ", " - << " gray_image_part.data=" << ((size_t)gray_image_part.data) << "\n"); + // LOGLN("OrbFeaturesFinder::find: gray_image_part.empty=" << (gray_image_part.empty()?"true":"false") << ", " + // << " gray_image_part.size()=(" << gray_image_part.size().width << "x" << gray_image_part.size().height << "), " + // << " gray_image_part.dims=" << gray_image_part.dims << ", " + // << " gray_image_part.data=" << ((size_t)gray_image_part.data) << "\n"); (*orb)(gray_image_part, Mat(), points, descriptors); @@ -583,11 +583,11 @@ void BestOf2NearestMatcher::match(const ImageFeatures &features1, const ImageFea if (matches_info.inliers_mask[i]) matches_info.num_inliers++; - // These coeffs are from paper M. Brown and D. Lowe. "Automatic Panoramic Image Stitching + // These coeffs are from paper M. Brown and D. Lowe. "Automatic Panoramic Image Stitching // using Invariant Features" matches_info.confidence = matches_info.num_inliers / (8 + 0.3 * matches_info.matches.size()); - // Set zero confidence to remove matches between too close images, as they don't provide + // Set zero confidence to remove matches between too close images, as they don't provide // additional information anyway. The threshold was set experimentally. matches_info.confidence = matches_info.confidence > 3. ? 0. : matches_info.confidence; diff --git a/modules/video/src/precomp.hpp b/modules/video/src/precomp.hpp index e80dfb0..58fc550 100644 --- a/modules/video/src/precomp.hpp +++ b/modules/video/src/precomp.hpp @@ -52,6 +52,8 @@ #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/core/internal.hpp" +#include + #ifdef HAVE_TEGRA_OPTIMIZATION #include "opencv2/video/video_tegra.hpp" #endif diff --git a/samples/android/15-puzzle/.project b/samples/android/15-puzzle/.project index e0b9349..fdb9a40 100644 --- a/samples/android/15-puzzle/.project +++ b/samples/android/15-puzzle/.project @@ -1,33 +1,33 @@ - - - Sample - 15-puzzle - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - + + + OpenCV Sample - 15-puzzle + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/samples/android/15-puzzle/res/drawable/icon.png b/samples/android/15-puzzle/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/15-puzzle/res/values/strings.xml b/samples/android/15-puzzle/res/values/strings.xml index 35902fd..1261ead 100644 --- a/samples/android/15-puzzle/res/values/strings.xml +++ b/samples/android/15-puzzle/res/values/strings.xml @@ -1,4 +1,4 @@ - OpenCV Sample - 15-puzzle + OCV 15 Puzzle diff --git a/samples/android/color-blob-detection/.project b/samples/android/color-blob-detection/.project index b0f36b7..c863652 100644 --- a/samples/android/color-blob-detection/.project +++ b/samples/android/color-blob-detection/.project @@ -1,6 +1,6 @@ - ColorBlobDetection + OpenCV Sample - color-blob-detection diff --git a/samples/android/color-blob-detection/AndroidManifest.xml b/samples/android/color-blob-detection/AndroidManifest.xml index 848225f..83791f0 100644 --- a/samples/android/color-blob-detection/AndroidManifest.xml +++ b/samples/android/color-blob-detection/AndroidManifest.xml @@ -7,7 +7,7 @@ L`9r|n3#ts(U@pVoQ)(ZPc(6i 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 diff --git a/samples/android/color-blob-detection/res/drawable-mdpi/ic_launcher.png b/samples/android/color-blob-detection/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 359047dfa4ed206e41e2354f9c6b307e713efe32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 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 diff --git a/samples/android/color-blob-detection/res/drawable-xhdpi/ic_launcher.png b/samples/android/color-blob-detection/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 71c6d760f05183ef8a47c614d8d13380c8528499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14383 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 diff --git a/samples/android/color-blob-detection/res/drawable/icon.png b/samples/android/color-blob-detection/res/drawable/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..630454927b592eb585c21527c430fc739c7970a6 GIT binary patch literal 1997 zcmV;;2Qv7HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2iyk& z2s4Z(uWcvB1k+?B|HcZ5+p(*;Q^&-8AtzSnVCK7?)^Xiwf0*7z0ZN;t#z9i`sgtpqdV3hDNF*c2bKc!qcQaX zUny)Tz}^_l!dPca%!U9i64N>!i~1_h=?F58~*Mqs?aUag-wNp3eJ zaArHlobMV1PMO^yg*noOAUz|E0i{}8`nIiHOW|~F4mjoR_GH_vZVKN?bHNdXe;To> zxdyn_TnD>62p5lGlR~e9qrf7C+ui6sX@;J1@Mx>Yo=qMBRs~*)bDAoXUZYSHTab?f z_PACCXF@bcF}lW`X>mi~9D%@SGZ2{F%CTpbhLf>?v)%*vE3D~)z{*wz=t^t3pfEGA zffL(4AU5DX%yUkKoB_Jb(8oFW!NI-`j{z#&Z&^_sT-34vIXFYp`=GEPgYAu)4n9D4 z%K`*+8v7m2z|O!Kz|Xto?PB|!;VL`0G=ur`jDlQ$D=+i6dSt)j#Si?i#3rh3ZDkkx z+9TWVDcFEP;8fsZmts4LZyQ^=NS&&oMq^DBPd9*r!p~~YrdwMdQuxcK)CgcvlC7iQ z6m}XDL=_ke!d;S<2IvOy5aI>4B-sk!6i-qAqn6i#qR%}BH;aqaE~#zv6|u2ViZHn? z1hW8E8rkz`nyn$2WU0dhK4^p<)W{{jH|2^S^#FZ&jV&V)7;HC58VOgls*{S?bCuB! zgJG~P)&TrE+Oa9jPq^~G`MQI^ISDar1?}7f7D?&qi-Zc{Oivqep0%xlm22B7?$lt? zRDoZ$&ZSsjO2nE0ft%CR$aVrKp5WRX7^zue>Cw3+QGx=M@MFBYs{CEWmLZ zN*9hpz)s*B96QRjjj`Qi_;Vb>Z73h0DK9}$-axr}l%1BFSp9)x9Ky;`(^n%*$`F!V zkY*oPaAK+6&unXUeSit`5c;F3iU&9)kOVILi%-C3#za9jc>jUr;Wvs~#jZ#FaZ!2fi34Sb1N@BsFCj&@J zs;eb(o@Ffe=D?d6qPKGdXKQjn9~5j94Pu>ge`)`61V~3frX{l7>dTEi%6<8;N9K*(u}%^bWomltk*Vp@k|^lo)yA?qH}(jBlCHBo51XA|gNf(* zoeh<>k{r9Y4)pw$!k7FX&+PyB(?mq~(*^;K7{UQF&X#s!ILS zHX&7zhmyZ|_z=x$C7sRWW=r7+&daHU&gPWWQt)uC*X>tEFZ6J;H6WaAcCCQRo2VjP z>v8^kmJJ*U_eqdHY-p9+xixW&Umgf^mpLS>_nMj zvaJlD2pv8o7#@|SuT=D$XZ)5=GJyZFvEPhNoO#NE^Nc>q2{?8F#Z+({^MQk9zw9zH z=)VjA4HzfT(Fq(eDSwVGl!7_^3!$70OgHG7MYIxpx7Q{~Cgnag|7WoceAizs@IKwlGBBq*Ioi0qby4ylKkgqvR5BcLR&Vy39?8 - - - - - \ No newline at end of file diff --git a/samples/android/color-blob-detection/res/values/strings.xml b/samples/android/color-blob-detection/res/values/strings.xml index df79f45..5b6f2c1 100644 --- a/samples/android/color-blob-detection/res/values/strings.xml +++ b/samples/android/color-blob-detection/res/values/strings.xml @@ -1,7 +1,4 @@ - - Hello World, ColorBlobDetectionActivity! - ColorBlobDetection - + OCV Color Blob Detection \ No newline at end of file diff --git a/samples/android/face-detection/.project b/samples/android/face-detection/.project index c8323eb..11b7832 100644 --- a/samples/android/face-detection/.project +++ b/samples/android/face-detection/.project @@ -1,6 +1,6 @@ - Sample - face-detection + OpenCV Sample - face-detection diff --git a/samples/android/face-detection/res/drawable/icon.png b/samples/android/face-detection/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/face-detection/res/values/strings.xml b/samples/android/face-detection/res/values/strings.xml index cc59467..6ecd57d 100644 --- a/samples/android/face-detection/res/values/strings.xml +++ b/samples/android/face-detection/res/values/strings.xml @@ -1,4 +1,4 @@ - OpenCV Sample - face-detection + OCV Face Detection diff --git a/samples/android/image-manipulations/.project b/samples/android/image-manipulations/.project index dac708e..c5c2b16 100644 --- a/samples/android/image-manipulations/.project +++ b/samples/android/image-manipulations/.project @@ -1,6 +1,6 @@ - Sample - image-manipulations + OpenCV Sample - image-manipulations diff --git a/samples/android/image-manipulations/res/drawable/icon.png b/samples/android/image-manipulations/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/image-manipulations/res/values/strings.xml b/samples/android/image-manipulations/res/values/strings.xml index 528144e..1278ca5 100644 --- a/samples/android/image-manipulations/res/values/strings.xml +++ b/samples/android/image-manipulations/res/values/strings.xml @@ -1,4 +1,4 @@ - OpenCV Sample - image-manipulations + OCV Image Manipulations diff --git a/samples/android/tutorial-0-androidcamera/.project b/samples/android/tutorial-0-androidcamera/.project index f34a15e..33b0065 100644 --- a/samples/android/tutorial-0-androidcamera/.project +++ b/samples/android/tutorial-0-androidcamera/.project @@ -1,33 +1,33 @@ - - - Tutorial 0 (Basic) - Android Camera - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - + + + OpenCV Tutorial 0 - Android Camera + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/samples/android/tutorial-0-androidcamera/res/drawable/icon.png b/samples/android/tutorial-0-androidcamera/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/tutorial-0-androidcamera/res/values/strings.xml b/samples/android/tutorial-0-androidcamera/res/values/strings.xml index fe2656e..bf6a726 100644 --- a/samples/android/tutorial-0-androidcamera/res/values/strings.xml +++ b/samples/android/tutorial-0-androidcamera/res/values/strings.xml @@ -1,4 +1,4 @@ - Tutorial 0 (Basic) - Android Camera + OCV T0 Android Camera diff --git a/samples/android/tutorial-1-addopencv/.project b/samples/android/tutorial-1-addopencv/.project index b014ca7..f2f598d 100644 --- a/samples/android/tutorial-1-addopencv/.project +++ b/samples/android/tutorial-1-addopencv/.project @@ -1,6 +1,6 @@ - Tutorial 1 (Basic) - Add OpenCV + OpenCV Tutorial 1 - Add OpenCV diff --git a/samples/android/tutorial-1-addopencv/res/drawable/icon.png b/samples/android/tutorial-1-addopencv/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/tutorial-1-addopencv/res/values/strings.xml b/samples/android/tutorial-1-addopencv/res/values/strings.xml index 800d2df..f195d22 100644 --- a/samples/android/tutorial-1-addopencv/res/values/strings.xml +++ b/samples/android/tutorial-1-addopencv/res/values/strings.xml @@ -1,4 +1,4 @@ - Tutorial 1 (Basic) - Add OpenCV + OCV T1 Add OpenCV diff --git a/samples/android/tutorial-2-opencvcamera/.project b/samples/android/tutorial-2-opencvcamera/.project index 46aad4a..0ab0b53 100644 --- a/samples/android/tutorial-2-opencvcamera/.project +++ b/samples/android/tutorial-2-opencvcamera/.project @@ -1,6 +1,6 @@ - Tutorial 2 (Basic) - Use OpenCV Camera + OpenCV Tutorial 2 - Use OpenCV Camera diff --git a/samples/android/tutorial-2-opencvcamera/res/drawable/icon.png b/samples/android/tutorial-2-opencvcamera/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/tutorial-2-opencvcamera/res/values/strings.xml b/samples/android/tutorial-2-opencvcamera/res/values/strings.xml index eaf2fec..1be5687 100644 --- a/samples/android/tutorial-2-opencvcamera/res/values/strings.xml +++ b/samples/android/tutorial-2-opencvcamera/res/values/strings.xml @@ -1,4 +1,4 @@ - Tutorial 2 (Basic) - Use OpenCV Camera + OCV T2 Use OpenCV Camera diff --git a/samples/android/tutorial-3-native/.project b/samples/android/tutorial-3-native/.project index 49d648d..9c47446 100644 --- a/samples/android/tutorial-3-native/.project +++ b/samples/android/tutorial-3-native/.project @@ -1,6 +1,6 @@ - Tutorial 3 (Advanced) - Add Native OpenCV + OpenCV Tutorial 3 - Add Native OpenCV diff --git a/samples/android/tutorial-3-native/res/drawable/icon.png b/samples/android/tutorial-3-native/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 zcmV;w2SE6MEzJ**B!2;OQb$4nuFf3k00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru+y?>(J0~WpX@md(2Te&tK~#9!?VMeVT~idtfBVjK z+Vn$PT2rkOMQCZXC>kFRh!77$L{$19QBt(hhY}(pNIXy_Jbwre5+p(*;Q^&-8AtzSnVCK7?)^Xiwf0*7z0ZN; zt#z9i`sgtpqdV3hDNF*c2bKc!qcQaXUny)Tz}^_l!dPca%!U9i647@H zTub3}Z4Nl)?)GHctZoY5Nprywg?}2cs<{TZ)?5d>Jbwrmk71KSuY;q&B8A)C=sszN zo^tSLtH+*A9syPbUW#*?DwAHLP!wB`j|29&Rt9H6G)OVJ#+_+#L*N{Nz-TiNnBB^; zXO@POv4FGQ1NbYf>4Lz@RtD%wYq_8>Gq8aZ+dd#R;6KcBPKBHSy3EkWIrzcBz7CH8 zD%@{bQGXm<)Up6MI78F>ps*o>?TwlaK0tTN0t9p#`yI}}&cGSK&%5RAV*8xoDm%C| zgZcA}f?R(qFY~v0WWVFZ5B#shCaP_1Wf%L}BirvO*nmOcRN!KlVmpd&8(X4B-sk! z6i-qAqn6i#qR%}BH;aqaE~#zv6|u2ViZHn?1hW8E8rkz`nyn$2WU0dhK4^p<)W{{j zH|2^S^#FZ&jV&V)7;HC58VOgls*{S?bCuB!gJG~P)&TrE+Oa9jPq^~G`MQI^ISDar z1%K__1Qto@>WhR5;Y?2(ah|oUf|YCAD(=)^(o}(8wa%qjU`oWA0fC#-)W~)MD4yWj z92j}em|#tnq_4arsSD_4Hs=)x3L}1A3@pHL8cG+AL%>ep8yq{zwT-deWcYI&!fhxY zpeZjwQQkngdX$}(n^^sUV;sWDQPWo=On=G{l3b8xA6Rf=sou|QYj%Br3G)#8qp6Aq zI3S4Yg)SeCyY z1exmt@DpXM$qtQDM5=EqXVeLPEKN#c!JsDtNK2}#C32o+EcfQXn;4?Ea|CB=a(_V| z6l@d?Vx4k-Y5#HrNJl`XCA*t)Zf?+Mo)xyPuB~>+(;n=(Ek%XdQESEO%Z)wCefh9Q z=8fF3P7)JkYI^LEsp-;^DCpzW#k{r z9Y4)pw$!k7FX&+PyB(?mq~(*^;K7{UQF&X#s!ILSHX&7zhmyZ|_z=x$C7sRWW=r7+ z&daHU&gPWWQt)uC*X>tEFZ6J;H6WaAcCCQRo2VjP>v8^kmJJ*U_eqdHY=3)^@@4_Y zEaQm#Dey%TtMbc@TFK|&cH8m4Bp4o*rLR=xBt9P@#LWxwn)GU&ey01X%?(9sDTF)4qJE|h{f z{R^R-3`{rZnnkn{e7DyoNq;8gJ~jVmu?>9JUqCrvbg^kTx;(|)`9?4mSGm)w+l>rb zUOVTg8jBt@u6TVAaI#q`6kary5G76NH{<#^FxqA?*CX@wsQYA6ShZVnA$cN>E{Dtl zsu+^MB_&1-G*juJ*Sc zne-vht40^BK^b%8`xIrMGLxPX>)ta_0^@|@sc%NOg@Ab|Gf);HtU~zRL);gH-PMy| z0d%?N{k{si8FU56(l8in56H_I?y~x@ay)$*L@^y9=Vy^=h4r;#n(VQ&sPfi($#O?% zbofNOM>0`3Y51CIQ-5B9q~#+5=pBu_s@IKwlGBBq*0ygjFN5pKPhX(6EM`iyEmNpsVTwMig`tNOyLfxOD32M1&X0+%5^MN*MbP z9!S-&v$JVB=sJ)C#uyU=^e*TU%c%}$W>o3k$R3otaGXW>^p%My9XJMo0hIkXwgKyK zQM_r&o;y-r%Af#KT}_~R5V3wKAf551h5!&M3;^V40QhsMBCi3!Jv0Dp zH~@fB4ghcv^P5dnE)7&p2D)08cuA+YmWP)>O~hLV001rPe+&Y0^Ev-h1`;*gFY$j1 z0R}^MFO#w<>uG722TyP1hY*DX46n`M!sc7l0w?6{d6MeoAeahJ6S|C(amA*T)mR_{OZ3Blx(BPTCDm}&9H(21R{K0297$T)kbT&? z{dC03t=>Mx34h{!uR(t!{32}rxMhAv@;oct;9A^g@xw)aP&am##)cM>fFv(|;(E{sVUd)0q$Ws=+p zWO>#(*Y=N-!<*PaP(SF!kJsL)Ty#NPclz!WbdgZN1UknfZ%g<3VwNN5Jg98FJKpl< zs57QEXVZsL6`r!4pT;?e4AY$e%TEet`b*#7ucSw%QpR~>EVON;PDULUC1#KHg6W58 zAg6{;$~D?j7v!vW-5HYXCD2c@sk?yla~x5;mJ0S)Co&Vtj%`@@&TvBxoKKVb#d&w( z6_K`<&%x3dJ%X4LKhD} ziRY=yB1GFh^nAD7-&VL)IQ1oBOEK%yl3k*o}oe=17yFKJ35U9}{tV`*7 z)jW!cgxp2u-^wgH!g^J}Js)$gjrCx!0(amTy85qSYP8=nQp1^6hMF>19fBeQRfVb} zjsjud!1_Ro!wfxfR~b$HoD8P7Xov-o62mMPSU_hRs(DnKo9GaQq!i7*G?r995swFq z=e{xb_+!N7akpOiDG3Df*q-hXo$Mnsb@bD;qbeN50!7eL`&B_=yP;kXf9=|jlx9Uy zi+VYrE^_z+os1@DU;FMp`W?f8fn(xro#B2wpth^d@a)Q{`g4?l39iDC1)lxZ4HQ;E zaqijkfKu4a#Y>*>C#x> zxj>U;8P`VjVLpWl{Zo))yy)|9)mmj9xgj`#Sle1L`hSQuKUB`&ijLQcVYwgOd?YsP z)XyYAHs6WO)Z+#l55HHIIbfU!9n3;<;mPHxFI9IUoe4L3T4tp2VtY@ko=4)blZ*qD zPkTav>(SgY!?s*xHcLZ1axYWWGL5@>3gpf>X;a`ZmKBA`f(YZIWG`arNT1%X3V0jf zZapz)lHAKHr%f6(?X}j)6R7%TeC=odAUr1)Vfn1R-4_QaZOxgbzAoFW)(0_JV(ZIP z;&an~*N6GWzEAiv`!XGL9jHb^tgK03p&ys%V z4%5BTy%4lfAAa^HSZI%p0uS)V-328pk1|=7Nx>e{NqyuEM2$*9#ZNhPvgi#TQ7&B2 z%v$ZVxFdsf+zu$?Jw@O6!mdjgLof_0aFy?Ldi?*qJW2xpiYru)nNX+gjuTA#l~q`n z*4%qa=>_RhUiB+;N>Xr z^C3e(GQ^FKi~Q{%fdlurdK}hv%rr}a{VM=bee&?jOR?2PpJhuZqyOt?9rh3btPl%z zG}BshvLokYV*%soefR3n6|Sv>ZvOd^^nt3?88B~ti{pXW@Et7wuE7GAOY=xAK9r#U z#IvWBTVBW2tp{3yh#$!jSK^^pU-HmqzzD?`9hbd>d z5~^4=VdXDgP{(y(lA}CxbISG5oI>33=+pt3kAac}9UYHs2hVAe9`JTaJgv&t&>upN zvOj&C-&3_k#p%Ew5%Tx3!nVrW2WLLl5yE_lC7Vjk)y}zY>+Um+Blik!2;(q_uGbP0 z{h#Cv;o9vro=LgFl^$R3J2))-QjoYKAz9|igo)2AwC0vjt);R5a+L=yZ+DNN^4@pe z2RGr#NY(512DmJ233K&{KVqH8&dxq8_t;9pB3+{Y_2o@VP@~52QTOrIExg+CET?Hh zXxfo`EEPwe1sl?E3~e~}HfX4j=TOtJrQFj+hD)Mf6Sj_tVMbdP-P=yTFIRQ1a@ue`VU-sUu} zWSG9w$%H^)GaP%QCHQ&CZ+dzfZJ1G6DN5IYnnKJpT3cBa*VHg}piyudcw%R|5)~L! zI^r>Nv^5ieALlN&)wuiapsf=>%xSD8pbvWjqmjM=mw-_29mo!a_11XWy`i5R86DLW zViB!OTf+R@54l;Oq%D<=Gl7?mpb|<`^~-ve{SOWg)9^wts;J3EyHE}+jCros5%*)V z&Ux;p4$dqwkz(z8n*v$%etj)(%!B~u(d-}Z?hLIw30^v4bjBam(3ejde()jrL=!#@ z4>Pf{vR*zv3hw0PMKjZALTGrN@c#Y#yYnBun@x4jm{-Nv(pv;CgQ-siDZQc#c2l)CPcYHE)c(Boe# z`6_EYq-?aGRa7L4sgOx_-F^t0TemK!QKl!J5V?e@sM0qxV>L81B#}tQ66|$bGV`YC z5LwwQs`fzC=d|XfL$pQ7_ckZs(?gh3wwCyB>62idg9kkJoH(5Yg6iTP{!b!Vk5)}B zX2A&MYh#OH^ZRwSMH;e7sX`@qS+h5KXY?-{6W9bGx#em7%N{;H!klz0G%=4logiQk zOFZOvFv4!az@)*w8=<@WIsT@*W4j8}`Av_PlWT87q`j8KolZ4lbTQ7G`2gP|y2E2Z1FVM_85Y7|B{1PS-1lJ8n~7UH%&PAB6RF8&!VFwqUY8~%l^`zfCn zk4(!%pswMVIX%w8@t)l^)#?Y%mxbLNya`VNYY4Xig|G9_B>M#wMvM-CEpj z*gf&g$*;`GxyqyY4b&;W`;p^w*Typ%hhzKT{RU!+LRY%ab?V_mysX4z^un=K?-P-c zQ@*kDN7k{{5E6u{pdx4TKo)w#D(m{(#6-3#aiML-obZ@4w(f?F3dPpd7poZ@e2^&S zWPV?fj44JT;3N4$c_HEbZiawM@A$yV->EHww{MYoci#iw_Bz^%hc2QAK-d$03&d%K1K(uH`m8sOF1 z2;Z6n&Vo8l6kVo-cJ!ZJ0qFw)a?GpaJ=G%{aw)ypT&wn7bx$?25V5vs70dWAqbqmh z`xX|8w=g#y`m-bzVl_(~Et(NX{n~G@pe?bILN^^?qPoP8?NWyckgzenlzAGRvdPQiZ|I|6CMN9 zRkfA0=iiIp3L2mkU2c;_R!M?uRn*DJ9nU1tdegkcj7^g2`b~$g{LkLXBpHE+gfeWqv2L}hgFB0Er6UNhnm^B?{8VmZVsi;2neg5pWcZzE(lfu{=dH6CE>NSb0 z#wJ~uNd%2;YpRBTeG~~iNYFt&ww1oz#x~v-_#%U4F#Niyf4!DVIK>RSmfxT6j(Dm4 z`sTW~WnV(4lfQ?@+G*Wl-SI?ixc6s zR*8LfsJplh0dmrS0x%&sEZvmc(p1-T225&3HfFIr=E0BFWDg?}7tQ^ZEBe?w%0MYq{+WK!$Pl@oY%c5J3$80a3J&49x!N`?x=ISZj;nd`C=vqsa*60 zx4~E3?)Byn<%dQ|GaK?<__$VlRybUT+7#QVBM{N2HnIKHXecH92U>))jBzUcL}*XQ z-2!|zxw*J7ft)l8LfnPYyfOYo=}mK=-Gkb=k^DM~Eyzchbb{qS4+erk!3az;oom)l zH85-!^)}5N;?DM0(!n44ppBxv!5r3 z4wV}$anji(W<9oI{jV$Te~VwxgCc#GRhwu_ttmbzfo}6geS*J!up%V$@rDUA zWMYHywPK%&quW#)RVk^sHAx2w4KCDHYgY{a1PQGCy)HD0eo+w~-5WtoF__eDqfYXU zZ8Mm6wbs<*{nrPv%@@<@d3+{f7cRy)ZcK};F?amU8Sq6`gU93tiK*>xx~nI96f|ea zmutmQ*pB!ott?%(=WC-y>H3~be%y=h;$Ct&M60y;{pXb$ZQ8_v+J&O^t^hL!v#KfN&pF=1Vcv^XM(B|)z*Js?*J`g`NCM5?qF z>u^NM0OF^A^(yjgs$FM#y*M7N7JW;s*GXC6 zpTRt>(hy-qo3=$z%R=Il67 zU&F7etuS%XB&aFusalOjZ5k|Z%|(@GT~GrKRhJi&waPE+p`-MN6MIYpmpkw^%T1#a zhhpIVQ{&WiEy$Gr8}>}TM+ew5ZVv-&5MA``qab1WoH55bAaIbfeKUdA?=&ZnqtcCM zAjS%QT<;p+WbyNK_~!8{W;xoVWcKZn^mPNpZ%<2XKQ`rLDem-`!Jf`G3NUt&kP1py zf@g}-eQTr&139j)+rQb~X_Z{feG)}`y=jhFkDhBwzKKppJg16kxU?TXebKbScVd7v z%DpdjZ9s~VIlG2wnI=-BlF3r3ZT0t}>o0L$pcS=Zo=yF*bJ_JUnKn|RiR57ZkNGoh zN!8w?;NK@BsMXuw`j?lSD6l4eqM3{%q2?ydR)>FWHt*ZF7OAR<1zFn5@IS_1vG70n zn`iFZzgW8V5a3(x+jl`%dtUyja*?#HNH||_Z&x1@fb(~CB)PgEgFHzdNL@WcW6KBz zj!UPj|2er_nv|UX*8`A2OQR*x3X*7yxim&eT2V<(MiMQjghua6uHgPpfVZ!Ur(4MX V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/tutorial-3-native/res/values/strings.xml b/samples/android/tutorial-3-native/res/values/strings.xml index a78b6e2..639ab1d 100644 --- a/samples/android/tutorial-3-native/res/values/strings.xml +++ b/samples/android/tutorial-3-native/res/values/strings.xml @@ -1,4 +1,4 @@ - Tutorial 3 (Advanced) - Add Native OpenCV + OCV T3 Add Native OpenCV diff --git a/samples/android/tutorial-4-mixed/.project b/samples/android/tutorial-4-mixed/.project index e8c3eb4..52fff84 100644 --- a/samples/android/tutorial-4-mixed/.project +++ b/samples/android/tutorial-4-mixed/.project @@ -1,6 +1,6 @@ - Tutorial 4 (Advanced) - Mix Java+Native OpenCV + OpenCV Tutorial 4 - Mix Java+Native OpenCV diff --git a/samples/android/tutorial-4-mixed/res/drawable/icon.png b/samples/android/tutorial-4-mixed/res/drawable/icon.png index 4e828bafd86aae740c6d4da0af6cc67653b535a5..630454927b592eb585c21527c430fc739c7970a6 100644 GIT binary patch delta 1983 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ diff --git a/samples/android/tutorial-4-mixed/res/values/strings.xml b/samples/android/tutorial-4-mixed/res/values/strings.xml index 27a3833..c7b0c27 100644 --- a/samples/android/tutorial-4-mixed/res/values/strings.xml +++ b/samples/android/tutorial-4-mixed/res/values/strings.xml @@ -1,4 +1,4 @@ - Tutorial 4 (Advanced) - Mix Java+Native OpenCV + OCV T4 Mix Java+Native OpenCV diff --git a/samples/cpp/bagofwords_classification.cpp b/samples/cpp/bagofwords_classification.cpp index 100467d..559e77b 100644 --- a/samples/cpp/bagofwords_classification.cpp +++ b/samples/cpp/bagofwords_classification.cpp @@ -2014,7 +2014,7 @@ struct VocabTrainParams // It shouldn't matter which object class is specified here - visual vocab will still be the same. int vocabSize; //number of visual words in vocabulary to train int memoryUse; // Memory to preallocate (in MB) when training vocab. - // Change this depending on the size of the dataset/available memory. + // Change this depending on the size of the dataset/available memory. float descProportion; // Specifies the number of descriptors to use from each image as a proportion of the total num descs. }; @@ -2126,8 +2126,10 @@ static Mat trainVocabulary( const string& filename, VocData& vocData, const Voca if( !readVocabulary( filename, vocabulary) ) { CV_Assert( dextractor->descriptorType() == CV_32FC1 ); - const int descByteSize = dextractor->descriptorSize()*4; - const int maxDescCount = (trainParams.memoryUse * 1048576) / descByteSize; // Total number of descs to use for training. + const int elemSize = CV_ELEM_SIZE(dextractor->descriptorType()); + const int descByteSize = dextractor->descriptorSize() * elemSize; + const int bytesInMB = 1048576; + const int maxDescCount = (trainParams.memoryUse * bytesInMB) / descByteSize; // Total number of descs to use for training. cout << "Extracting VOC data..." << endl; vector images; @@ -2142,9 +2144,8 @@ static Mat trainVocabulary( const string& filename, VocData& vocData, const Voca while( images.size() > 0 ) { - if( bowTrainer.descripotorsCount() >= maxDescCount ) + if( bowTrainer.descripotorsCount() > maxDescCount ) { - assert( bowTrainer.descripotorsCount() == maxDescCount ); #ifdef DEBUG_DESC_PROGRESS cout << "Breaking due to full memory ( descriptors count = " << bowTrainer.descripotorsCount() << "; descriptor size in bytes = " << descByteSize << "; all used memory = " diff --git a/samples/python2/digits.py b/samples/python2/digits.py index 88e9fb8..1bfbf4d 100644 --- a/samples/python2/digits.py +++ b/samples/python2/digits.py @@ -17,6 +17,7 @@ from common import clock, mosaic SZ = 20 # size of each digit is SZ x SZ CLASS_N = 10 +DIGITS_FN = 'digits.png' def load_digits(fn): print 'loading "%s" ...' % fn @@ -95,7 +96,7 @@ def evaluate_model(model, digits, samples, labels): if __name__ == '__main__': print __doc__ - digits, labels = load_digits('digits.png') + digits, labels = load_digits(DIGITS_FN) print 'preprocessing...' # shuffle digits diff --git a/samples/python2/digits_adjust.py b/samples/python2/digits_adjust.py index 3e1b6b7..e5a751a 100644 --- a/samples/python2/digits_adjust.py +++ b/samples/python2/digits_adjust.py @@ -11,11 +11,10 @@ Usage: digits_adjust.py [--model {svm|knearest}] [--cloud] [--env ] --model {svm|knearest} - select the classifier (SVM is the default) - --cloud - use PiCloud computing platform (for SVM only) + --cloud - use PiCloud computing platform --env - cloud environment name ''' -# TODO dataset preprocessing in cloud # TODO cloud env setup tutorial import numpy as np @@ -24,6 +23,14 @@ from multiprocessing.pool import ThreadPool from digits import * +try: + import cloud + have_cloud = True +except ImportError: + have_cloud = False + + + def cross_validate(model_class, params, samples, labels, kfold = 3, pool = None): n = len(samples) folds = np.array_split(np.arange(n), kfold) @@ -46,66 +53,88 @@ def cross_validate(model_class, params, samples, labels, kfold = 3, pool = None) scores = pool.map(f, xrange(kfold)) return np.mean(scores) -def adjust_KNearest(samples, labels): - print 'adjusting KNearest ...' - best_err, best_k = np.inf, -1 - for k in xrange(1, 9): - err = cross_validate(KNearest, dict(k=k), samples, labels) - if err < best_err: - best_err, best_k = err, k - print 'k = %d, error: %.2f %%' % (k, err*100) - best_params = dict(k=best_k) - print 'best params:', best_params - return best_params - -def adjust_SVM(samples, labels, usecloud=False, cloud_env=''): - Cs = np.logspace(0, 5, 10, base=2) - gammas = np.logspace(-7, -2, 10, base=2) - scores = np.zeros((len(Cs), len(gammas))) - scores[:] = np.nan - - if usecloud: - try: - import cloud - except ImportError: - print 'cloud module is not installed' + +class App(object): + def __init__(self, usecloud=False, cloud_env=''): + if usecloud and not have_cloud: + print 'warning: cloud module is not installed, running locally' usecloud = False - if usecloud: - print 'uploading dataset to cloud...' - np.savez('train.npz', samples=samples, labels=labels) - cloud.files.put('train.npz') - - print 'adjusting SVM (may take a long time) ...' - def f(job): - i, j = job - params = dict(C = Cs[i], gamma=gammas[j]) - score = cross_validate(SVM, params, samples, labels) - return i, j, score - def fcloud(job): - i, j = job - cloud.files.get('train.npz') - npz = np.load('train.npz') - params = dict(C = Cs[i], gamma=gammas[j]) - score = cross_validate(SVM, params, npz['samples'], npz['labels']) - return i, j, score - - if usecloud: - jids = cloud.map(fcloud, np.ndindex(*scores.shape), _env=cloud_env, _profile=True) - ires = cloud.iresult(jids) - else: - pool = ThreadPool(processes=cv2.getNumberOfCPUs()) - ires = pool.imap_unordered(f, np.ndindex(*scores.shape)) + self.usecloud = usecloud + self.cloud_env = cloud_env + + if self.usecloud: + print 'uploading dataset to cloud...' + cloud.files.put(DIGITS_FN) + self.preprocess_job = cloud.call(self.preprocess, _env=self.cloud_env) + else: + self._samples, self._labels = self.preprocess() - for count, (i, j, score) in enumerate(ires): - scores[i, j] = score - print '%d / %d (best error: %.2f %%, last: %.2f %%)' % (count+1, scores.size, np.nanmin(scores)*100, score*100) - print scores + def preprocess(self): + if self.usecloud: + cloud.files.get(DIGITS_FN) + digits, labels = load_digits(DIGITS_FN) + shuffle = np.random.permutation(len(digits)) + digits, labels = digits[shuffle], labels[shuffle] + digits2 = map(deskew, digits) + samples = np.float32(digits2).reshape(-1, SZ*SZ) / 255.0 + return samples, labels + + def get_dataset(self): + if self.usecloud: + return cloud.result(self.preprocess_job) + else: + return self._samples, self._labels + + def run_jobs(self, f, jobs): + if self.usecloud: + jids = cloud.map(f, jobs, _env=self.cloud_env, _profile=True, _depends_on=self.preprocess_job) + ires = cloud.iresult(jids) + else: + pool = ThreadPool(processes=cv2.getNumberOfCPUs()) + ires = pool.imap_unordered(f, jobs) + return ires + + def adjust_SVM(self): + Cs = np.logspace(0, 5, 10, base=2) + gammas = np.logspace(-7, -2, 10, base=2) + scores = np.zeros((len(Cs), len(gammas))) + scores[:] = np.nan + + print 'adjusting SVM (may take a long time) ...' + def f(job): + i, j = job + samples, labels = self.get_dataset() + params = dict(C = Cs[i], gamma=gammas[j]) + score = cross_validate(SVM, params, samples, labels) + return i, j, score + + ires = self.run_jobs(f, np.ndindex(*scores.shape)) + for count, (i, j, score) in enumerate(ires): + scores[i, j] = score + print '%d / %d (best error: %.2f %%, last: %.2f %%)' % (count+1, scores.size, np.nanmin(scores)*100, score*100) + print scores + + i, j = np.unravel_index(scores.argmin(), scores.shape) + best_params = dict(C = Cs[i], gamma=gammas[j]) + print 'best params:', best_params + print 'best error: %.2f %%' % (scores.min()*100) + return best_params + + def adjust_KNearest(self): + print 'adjusting KNearest ...' + def f(k): + samples, labels = self.get_dataset() + err = cross_validate(KNearest, dict(k=k), samples, labels) + return k, err + best_err, best_k = np.inf, -1 + for k, err in self.run_jobs(f, xrange(1, 9)): + if err < best_err: + best_err, best_k = err, k + print 'k = %d, error: %.2f %%' % (k, err*100) + best_params = dict(k=best_k) + print 'best params:', best_params, 'err: %.2f' % (best_err*100) + return best_params - i, j = np.unravel_index(scores.argmin(), scores.shape) - best_params = dict(C = Cs[i], gamma=gammas[j]) - print 'best params:', best_params - print 'best error: %.2f %%' % (scores.min()*100) - return best_params if __name__ == '__main__': import getopt @@ -113,6 +142,7 @@ if __name__ == '__main__': print __doc__ + args, _ = getopt.getopt(sys.argv[1:], '', ['model=', 'cloud', 'env=']) args = dict(args) args.setdefault('--model', 'svm') @@ -121,16 +151,10 @@ if __name__ == '__main__': print 'unknown model "%s"' % args['--model'] sys.exit(1) - digits, labels = load_digits('digits.png') - shuffle = np.random.permutation(len(digits)) - digits, labels = digits[shuffle], labels[shuffle] - digits2 = map(deskew, digits) - samples = np.float32(digits2).reshape(-1, SZ*SZ) / 255.0 - t = clock() + app = App(usecloud='--cloud' in args, cloud_env = args['--env']) if args['--model'] == 'knearest': - adjust_KNearest(samples, labels) + app.adjust_KNearest() else: - adjust_SVM(samples, labels, usecloud='--cloud' in args, cloud_env = args['--env']) + app.adjust_SVM() print 'work time: %f s' % (clock() - t) - \ No newline at end of file diff --git a/samples/python2/fitline.py b/samples/python2/fitline.py new file mode 100644 index 0000000..71e2cb0 --- /dev/null +++ b/samples/python2/fitline.py @@ -0,0 +1,78 @@ +''' +Robust line fitting. +================== + +Example of using cv2.fitLine function for fitting line to points in presence of outliers. + +Usage +----- +fitline.py + +Switch through different M-estimator functions and see, how well the robust functions +fit the line even in case of ~50% of outliers. + +Keys +---- +SPACE - generaty random points +f - change distance function +ESC - exit +''' + +import numpy as np +import cv2 +import itertools as it +from common import draw_str + + +w, h = 512, 256 + +def toint(p): + return tuple(map(int, p)) + +def sample_line(p1, p2, n, noise=0.0): + p1 = np.float32(p1) + t = np.random.rand(n,1) + return p1 + (p2-p1)*t + np.random.normal(size=(n, 2))*noise + +dist_func_names = it.cycle('CV_DIST_L2 CV_DIST_L1 CV_DIST_L12 CV_DIST_FAIR CV_DIST_WELSCH CV_DIST_HUBER'.split()) +cur_func_name = dist_func_names.next() + +def update(_=None): + noise = cv2.getTrackbarPos('noise', 'fit line') + n = cv2.getTrackbarPos('point n', 'fit line') + r = cv2.getTrackbarPos('outlier %', 'fit line') / 100.0 + outn = int(n*r) + + p0, p1 = (90, 80), (w-90, h-80) + img = np.zeros((h, w, 3), np.uint8) + cv2.line(img, toint(p0), toint(p1), (0, 255, 0)) + + if n > 0: + line_points = sample_line(p0, p1, n-outn, noise) + outliers = np.random.rand(outn, 2) * (w, h) + points = np.vstack([line_points, outliers]) + for p in line_points: + cv2.circle(img, toint(p), 2, (255, 255, 255), -1) + for p in outliers: + cv2.circle(img, toint(p), 2, (64, 64, 255), -1) + func = getattr(cv2.cv, cur_func_name) + vx, vy, cx, cy = cv2.fitLine(np.float32(points), func, 0, 0.01, 0.01) + cv2.line(img, (int(cx-vx*w), int(cy-vy*w)), (int(cx+vx*w), int(cy+vy*w)), (0, 0, 255)) + + draw_str(img, (20, 20), cur_func_name) + cv2.imshow('fit line', img) + +if __name__ == '__main__': + print __doc__ + + cv2.namedWindow('fit line') + cv2.createTrackbar('noise', 'fit line', 3, 50, update) + cv2.createTrackbar('point n', 'fit line', 100, 500, update) + cv2.createTrackbar('outlier %', 'fit line', 30, 100, update) + while True: + update() + ch = cv2.waitKey(0) + if ch == ord('f'): + cur_func_name = dist_func_names.next() + if ch == 27: + break diff --git a/samples/python2/video.py b/samples/python2/video.py index ab59814..8d95bf0 100644 --- a/samples/python2/video.py +++ b/samples/python2/video.py @@ -1,3 +1,32 @@ +''' +Video capture sample. + +Sample shows how VideoCapture class can be used to acquire video +frames from a camera of a movie file. Also the sample provides +an example of procedural video generation by an object, mimicking +the VideoCapture interface (see Chess class). + +'create_capture' is a convinience function for capture creation, +falling back to procedural video in case of error. + +Usage: + video.py [--shotdir ] [source0] [source1] ...' + + sourceN is an + - integer number for camera capture + - name of video file + - synth: for procedural video + +Synth examples: + synth:bg=../cpp/lena.jpg:noise=0.1 + synth:class=chess:bg=../cpp/lena.jpg:noise=0.1:size=640x480 + +Keys: + ESC - exit + SPACE - save current frame to directory + +''' + import numpy as np import cv2 from time import clock @@ -100,8 +129,7 @@ presets = dict( def create_capture(source = 0, fallback = presets['chess']): - ''' - source: or '||synth [:= [:...]]' + '''source: or '||synth [:= [:...]]' ''' source = str(source).strip() chunks = source.split(':') @@ -136,9 +164,7 @@ if __name__ == '__main__': import sys import getopt - print 'USAGE: video.py [--shotdir ] [source0] [source1] ...' - print "source: '' or '' or 'synth:'" - print + print __doc__ args, sources = getopt.getopt(sys.argv[1:], '', 'shotdir=') args = dict(args) @@ -146,8 +172,6 @@ if __name__ == '__main__': if len(sources) == 0: sources = [ 0 ] - print 'Press SPACE to save current frame' - caps = map(create_capture, sources) shot_idx = 0 while True: diff --git a/samples/python2/watershed.py b/samples/python2/watershed.py index 56d7ebc..e02e020 100644 --- a/samples/python2/watershed.py +++ b/samples/python2/watershed.py @@ -1,18 +1,31 @@ -import numpy as np -import cv2 -from common import Sketcher +''' +Watershed segmentation +========= + +This program demonstrates the watershed segmentation algorithm +in OpenCV: watershed(). -help_message = ''' - USAGE: watershed.py [] +Usage +----- +watershed.py [image filename] - Use keys 1 - 7 to switch marker color +Keys +---- + 1-7 - switch marker color SPACE - update segmentation r - reset - a - switch autoupdate + a - toggle autoupdate ESC - exit ''' + + + +import numpy as np +import cv2 +from common import Sketcher + class App: def __init__(self, fn): self.img = cv2.imread(fn) @@ -60,5 +73,5 @@ if __name__ == '__main__': import sys try: fn = sys.argv[1] except: fn = '../cpp/fruits.jpg' - print help_message + print __doc__ App(fn).run() -- 2.7.4