From 1d8729a7aaaf5013c17821a0927d277c1aac4a3b Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 23 Oct 2012 12:52:54 +0400 Subject: [PATCH 01/36] Don't use _interlockedExchangeAdd in case of GNU compiler --- modules/core/src/system.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp index a4e4fc6e9c..d463a84ef3 100644 --- a/modules/core/src/system.cpp +++ b/modules/core/src/system.cpp @@ -806,6 +806,7 @@ struct Mutex::Impl int refcount; }; +#ifndef __GNUC__ int _interlockedExchangeAdd(int* addr, int delta) { #if defined _MSC_VER && _MSC_VER >= 1500 @@ -814,6 +815,7 @@ int _interlockedExchangeAdd(int* addr, int delta) return (int)InterlockedExchangeAdd((long volatile*)addr, delta); #endif } +#endif // __GNUC__ #elif defined __APPLE__ From 00720788570325594688eb0f2d8db548656e44c2 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 23 Oct 2012 12:57:56 +0400 Subject: [PATCH 02/36] Hide non-windows variable in gtest --- modules/ts/src/ts_gtest.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ts/src/ts_gtest.cpp b/modules/ts/src/ts_gtest.cpp index 4144f026f2..96bb089bb8 100644 --- a/modules/ts/src/ts_gtest.cpp +++ b/modules/ts/src/ts_gtest.cpp @@ -6352,7 +6352,9 @@ namespace internal { // Valid only for fast death tests. Indicates the code is running in the // child process of a fast style death test. +# if !GTEST_OS_WINDOWS static bool g_in_fast_death_test_child = false; +# endif // Returns a Boolean value indicating whether the caller is currently // executing in the context of the death test child process. Tools such as From afc79e2a02110d47aad49bbe81a15dcd07f1f46f Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 23 Oct 2012 13:08:43 +0400 Subject: [PATCH 03/36] Fix warnings from MSVC 9 64-bit --- modules/features2d/src/fast.cpp | 4 ++++ modules/imgproc/perf/perf_warp.cpp | 12 ++++++++---- modules/stitching/src/seam_finders.cpp | 6 +++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/modules/features2d/src/fast.cpp b/modules/features2d/src/fast.cpp index 92d57e0189..40442ef182 100644 --- a/modules/features2d/src/fast.cpp +++ b/modules/features2d/src/fast.cpp @@ -44,6 +44,10 @@ The references are: #include "precomp.hpp" #include "fast_score.hpp" +#if defined _MSC_VER +# pragma warning( disable : 4127) +#endif + namespace cv { diff --git a/modules/imgproc/perf/perf_warp.cpp b/modules/imgproc/perf/perf_warp.cpp index 1c321db0a5..20dbffac51 100644 --- a/modules/imgproc/perf/perf_warp.cpp +++ b/modules/imgproc/perf/perf_warp.cpp @@ -120,10 +120,14 @@ PERF_TEST_P( TestWarpPerspectiveNear_t, WarpPerspectiveNear, resize(src, src, size); int shift = src.cols*0.04; - Mat srcVertices = (Mat_(1, 4) << Vec2f(0, 0), Vec2f(size.width-1, 0), - Vec2f(size.width-1, size.height-1), Vec2f(0, size.height-1)); - Mat dstVertices = (Mat_(1, 4) << Vec2f(0, shift), Vec2f(size.width-shift/2, 0), - Vec2f(size.width-shift, size.height-shift), Vec2f(shift/2, size.height-1)); + Mat srcVertices = (Mat_(1, 4) << Vec2f(0, 0), + Vec2f(static_cast(size.width-1), 0), + Vec2f(static_cast(size.width-1), static_cast(size.height-1)), + Vec2f(0, static_cast(size.height-1))); + Mat dstVertices = (Mat_(1, 4) << Vec2f(0, static_cast(shift)), + Vec2f(static_cast(size.width-shift/2), 0), + Vec2f(static_cast(size.width-shift), static_cast(size.height-shift)), + Vec2f(static_cast(shift/2), static_cast(size.height-1))); Mat warpMat = getPerspectiveTransform(srcVertices, dstVertices); Mat dst(size, type); diff --git a/modules/stitching/src/seam_finders.cpp b/modules/stitching/src/seam_finders.cpp index 383adc70b4..1439a6919b 100644 --- a/modules/stitching/src/seam_finders.cpp +++ b/modules/stitching/src/seam_finders.cpp @@ -628,7 +628,7 @@ bool DpSeamFinder::getSeamTips(int comp1, int comp2, Point &p1, Point &p2) { for (int j = i+1; j < nlabels; ++j) { - double size1 = points[i].size(), size2 = points[j].size(); + double size1 = static_cast(points[i].size()), size2 = static_cast(points[j].size()); double cx1 = cvRound(sum[i].x / size1), cy1 = cvRound(sum[i].y / size1); double cx2 = cvRound(sum[j].x / size2), cy2 = cvRound(sum[j].y / size1); @@ -648,7 +648,7 @@ bool DpSeamFinder::getSeamTips(int comp1, int comp2, Point &p1, Point &p2) for (int i = 0; i < 2; ++i) { - double size = points[idx[i]].size(); + double size = static_cast(points[idx[i]].size()); double cx = cvRound(sum[idx[i]].x / size); double cy = cvRound(sum[idx[i]].y / size); @@ -1036,7 +1036,7 @@ void DpSeamFinder::updateLabelsUsingSeam( for (map::iterator itr = connect2.begin(); itr != connect2.end(); ++itr) { - double len = contours_[comp1].size(); + double len = static_cast(contours_[comp1].size()); isAdjComp[itr->first] = itr->second / len > 0.05 && connectOther.find(itr->first)->second / len < 0.1; } From 9751014067d6aad3482c0a1462691e1104fa4f2f Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 23 Oct 2012 13:22:03 +0400 Subject: [PATCH 04/36] Fix warnings from MSVC 10 64-bit --- modules/objdetect/src/haar.cpp | 140 +++++++++++++++++---------------- 1 file changed, 73 insertions(+), 67 deletions(-) diff --git a/modules/objdetect/src/haar.cpp b/modules/objdetect/src/haar.cpp index e3c6f9bfb7..92da4ac25d 100644 --- a/modules/objdetect/src/haar.cpp +++ b/modules/objdetect/src/haar.cpp @@ -54,6 +54,9 @@ #if CV_AVX # define CV_HAAR_USE_AVX 1 +# if defined _MSC_VER +# pragma warning( disable : 4752 ) +# endif #else # if CV_SSE2 || CV_SSE3 # define CV_HAAR_USE_SSE 1 @@ -412,6 +415,9 @@ icvCreateHidHaarClassifierCascade( CvHaarClassifierCascade* cascade ) #define calc_sum(rect,offset) \ ((rect).p0[offset] - (rect).p1[offset] - (rect).p2[offset] + (rect).p3[offset]) +#define calc_sumf(rect,offset) \ + static_cast((rect).p0[offset] - (rect).p1[offset] - (rect).p2[offset] + (rect).p3[offset]) + CV_IMPL void cvSetImagesForHaarClassifierCascade( CvHaarClassifierCascade* _cascade, @@ -652,7 +658,7 @@ double icvEvalHidHaarClassifierAVX( CvHidHaarClassifier* classifier, nodes[6] = (classifier+6)->node + idxV[6]; nodes[7] = (classifier+7)->node + idxV[7]; - __m256 t = _mm256_set1_ps(variance_norm_factor); + __m256 t = _mm256_set1_ps(static_cast(variance_norm_factor)); t = _mm256_mul_ps(t, _mm256_set_ps(nodes[7]->threshold, nodes[6]->threshold, @@ -663,14 +669,14 @@ double icvEvalHidHaarClassifierAVX( CvHidHaarClassifier* classifier, nodes[1]->threshold, nodes[0]->threshold)); - __m256 offset = _mm256_set_ps(calc_sum(nodes[7]->feature.rect[0], p_offset), - calc_sum(nodes[6]->feature.rect[0], p_offset), - calc_sum(nodes[5]->feature.rect[0], p_offset), - calc_sum(nodes[4]->feature.rect[0], p_offset), - calc_sum(nodes[3]->feature.rect[0], p_offset), - calc_sum(nodes[2]->feature.rect[0], p_offset), - calc_sum(nodes[1]->feature.rect[0], p_offset), - calc_sum(nodes[0]->feature.rect[0], p_offset)); + __m256 offset = _mm256_set_ps(calc_sumf(nodes[7]->feature.rect[0], p_offset), + calc_sumf(nodes[6]->feature.rect[0], p_offset), + calc_sumf(nodes[5]->feature.rect[0], p_offset), + calc_sumf(nodes[4]->feature.rect[0], p_offset), + calc_sumf(nodes[3]->feature.rect[0], p_offset), + calc_sumf(nodes[2]->feature.rect[0], p_offset), + calc_sumf(nodes[1]->feature.rect[0], p_offset), + calc_sumf(nodes[0]->feature.rect[0], p_offset)); __m256 weight = _mm256_set_ps(nodes[7]->feature.rect[0].weight, nodes[6]->feature.rect[0].weight, @@ -683,14 +689,14 @@ double icvEvalHidHaarClassifierAVX( CvHidHaarClassifier* classifier, __m256 sum = _mm256_mul_ps(offset, weight); - offset = _mm256_set_ps(calc_sum(nodes[7]->feature.rect[1], p_offset), - calc_sum(nodes[6]->feature.rect[1], p_offset), - calc_sum(nodes[5]->feature.rect[1], p_offset), - calc_sum(nodes[4]->feature.rect[1], p_offset), - calc_sum(nodes[3]->feature.rect[1], p_offset), - calc_sum(nodes[2]->feature.rect[1], p_offset), - calc_sum(nodes[1]->feature.rect[1], p_offset), - calc_sum(nodes[0]->feature.rect[1], p_offset)); + offset = _mm256_set_ps(calc_sumf(nodes[7]->feature.rect[1], p_offset), + calc_sumf(nodes[6]->feature.rect[1], p_offset), + calc_sumf(nodes[5]->feature.rect[1], p_offset), + calc_sumf(nodes[4]->feature.rect[1], p_offset), + calc_sumf(nodes[3]->feature.rect[1], p_offset), + calc_sumf(nodes[2]->feature.rect[1], p_offset), + calc_sumf(nodes[1]->feature.rect[1], p_offset), + calc_sumf(nodes[0]->feature.rect[1], p_offset)); weight = _mm256_set_ps(nodes[7]->feature.rect[1].weight, nodes[6]->feature.rect[1].weight, @@ -704,21 +710,21 @@ double icvEvalHidHaarClassifierAVX( CvHidHaarClassifier* classifier, sum = _mm256_add_ps(sum, _mm256_mul_ps(offset, weight)); if( nodes[0]->feature.rect[2].p0 ) - tmp[0] = calc_sum(nodes[0]->feature.rect[2], p_offset) * nodes[0]->feature.rect[2].weight; + tmp[0] = calc_sumf(nodes[0]->feature.rect[2], p_offset) * nodes[0]->feature.rect[2].weight; if( nodes[1]->feature.rect[2].p0 ) - tmp[1] = calc_sum(nodes[1]->feature.rect[2], p_offset) * nodes[1]->feature.rect[2].weight; + tmp[1] = calc_sumf(nodes[1]->feature.rect[2], p_offset) * nodes[1]->feature.rect[2].weight; if( nodes[2]->feature.rect[2].p0 ) - tmp[2] = calc_sum(nodes[2]->feature.rect[2], p_offset) * nodes[2]->feature.rect[2].weight; + tmp[2] = calc_sumf(nodes[2]->feature.rect[2], p_offset) * nodes[2]->feature.rect[2].weight; if( nodes[3]->feature.rect[2].p0 ) - tmp[3] = calc_sum(nodes[3]->feature.rect[2], p_offset) * nodes[3]->feature.rect[2].weight; + tmp[3] = calc_sumf(nodes[3]->feature.rect[2], p_offset) * nodes[3]->feature.rect[2].weight; if( nodes[4]->feature.rect[2].p0 ) - tmp[4] = calc_sum(nodes[4]->feature.rect[2], p_offset) * nodes[4]->feature.rect[2].weight; + tmp[4] = calc_sumf(nodes[4]->feature.rect[2], p_offset) * nodes[4]->feature.rect[2].weight; if( nodes[5]->feature.rect[2].p0 ) - tmp[5] = calc_sum(nodes[5]->feature.rect[2], p_offset) * nodes[5]->feature.rect[2].weight; + tmp[5] = calc_sumf(nodes[5]->feature.rect[2], p_offset) * nodes[5]->feature.rect[2].weight; if( nodes[6]->feature.rect[2].p0 ) - tmp[6] = calc_sum(nodes[6]->feature.rect[2], p_offset) * nodes[6]->feature.rect[2].weight; + tmp[6] = calc_sumf(nodes[6]->feature.rect[2], p_offset) * nodes[6]->feature.rect[2].weight; if( nodes[7]->feature.rect[2].p0 ) - tmp[7] = calc_sum(nodes[7]->feature.rect[2], p_offset) * nodes[7]->feature.rect[2].weight; + tmp[7] = calc_sumf(nodes[7]->feature.rect[2], p_offset) * nodes[7]->feature.rect[2].weight; sum = _mm256_add_ps(sum,_mm256_load_ps(tmp)); @@ -918,7 +924,7 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, classifiers[7] = cascade->stage_classifier[i].classifier + j + 7; nodes[7] = classifiers[7]->node; - __m256 t = _mm256_set1_ps(variance_norm_factor); + __m256 t = _mm256_set1_ps(static_cast(variance_norm_factor)); t = _mm256_mul_ps(t, _mm256_set_ps(nodes[7]->threshold, nodes[6]->threshold, nodes[5]->threshold, @@ -928,14 +934,14 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, nodes[1]->threshold, nodes[0]->threshold)); - __m256 offset = _mm256_set_ps(calc_sum(nodes[7]->feature.rect[0], p_offset), - calc_sum(nodes[6]->feature.rect[0], p_offset), - calc_sum(nodes[5]->feature.rect[0], p_offset), - calc_sum(nodes[4]->feature.rect[0], p_offset), - calc_sum(nodes[3]->feature.rect[0], p_offset), - calc_sum(nodes[2]->feature.rect[0], p_offset), - calc_sum(nodes[1]->feature.rect[0], p_offset), - calc_sum(nodes[0]->feature.rect[0], p_offset)); + __m256 offset = _mm256_set_ps(calc_sumf(nodes[7]->feature.rect[0], p_offset), + calc_sumf(nodes[6]->feature.rect[0], p_offset), + calc_sumf(nodes[5]->feature.rect[0], p_offset), + calc_sumf(nodes[4]->feature.rect[0], p_offset), + calc_sumf(nodes[3]->feature.rect[0], p_offset), + calc_sumf(nodes[2]->feature.rect[0], p_offset), + calc_sumf(nodes[1]->feature.rect[0], p_offset), + calc_sumf(nodes[0]->feature.rect[0], p_offset)); __m256 weight = _mm256_set_ps(nodes[7]->feature.rect[0].weight, nodes[6]->feature.rect[0].weight, @@ -948,14 +954,14 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, __m256 sum = _mm256_mul_ps(offset, weight); - offset = _mm256_set_ps(calc_sum(nodes[7]->feature.rect[1], p_offset), - calc_sum(nodes[6]->feature.rect[1], p_offset), - calc_sum(nodes[5]->feature.rect[1], p_offset), - calc_sum(nodes[4]->feature.rect[1], p_offset), - calc_sum(nodes[3]->feature.rect[1], p_offset), - calc_sum(nodes[2]->feature.rect[1], p_offset), - calc_sum(nodes[1]->feature.rect[1], p_offset), - calc_sum(nodes[0]->feature.rect[1], p_offset)); + offset = _mm256_set_ps(calc_sumf(nodes[7]->feature.rect[1], p_offset), + calc_sumf(nodes[6]->feature.rect[1], p_offset), + calc_sumf(nodes[5]->feature.rect[1], p_offset), + calc_sumf(nodes[4]->feature.rect[1], p_offset), + calc_sumf(nodes[3]->feature.rect[1], p_offset), + calc_sumf(nodes[2]->feature.rect[1], p_offset), + calc_sumf(nodes[1]->feature.rect[1], p_offset), + calc_sumf(nodes[0]->feature.rect[1], p_offset)); weight = _mm256_set_ps(nodes[7]->feature.rect[1].weight, nodes[6]->feature.rect[1].weight, @@ -1023,7 +1029,7 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, classifiers[7] = cascade->stage_classifier[i].classifier + j + 7; nodes[7] = classifiers[7]->node; - __m256 t = _mm256_set1_ps(variance_norm_factor); + __m256 t = _mm256_set1_ps(static_cast(variance_norm_factor)); t = _mm256_mul_ps(t, _mm256_set_ps(nodes[7]->threshold, nodes[6]->threshold, @@ -1034,14 +1040,14 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, nodes[1]->threshold, nodes[0]->threshold)); - __m256 offset = _mm256_set_ps(calc_sum(nodes[7]->feature.rect[0], p_offset), - calc_sum(nodes[6]->feature.rect[0], p_offset), - calc_sum(nodes[5]->feature.rect[0], p_offset), - calc_sum(nodes[4]->feature.rect[0], p_offset), - calc_sum(nodes[3]->feature.rect[0], p_offset), - calc_sum(nodes[2]->feature.rect[0], p_offset), - calc_sum(nodes[1]->feature.rect[0], p_offset), - calc_sum(nodes[0]->feature.rect[0], p_offset)); + __m256 offset = _mm256_set_ps(calc_sumf(nodes[7]->feature.rect[0], p_offset), + calc_sumf(nodes[6]->feature.rect[0], p_offset), + calc_sumf(nodes[5]->feature.rect[0], p_offset), + calc_sumf(nodes[4]->feature.rect[0], p_offset), + calc_sumf(nodes[3]->feature.rect[0], p_offset), + calc_sumf(nodes[2]->feature.rect[0], p_offset), + calc_sumf(nodes[1]->feature.rect[0], p_offset), + calc_sumf(nodes[0]->feature.rect[0], p_offset)); __m256 weight = _mm256_set_ps(nodes[7]->feature.rect[0].weight, nodes[6]->feature.rect[0].weight, @@ -1054,14 +1060,14 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, __m256 sum = _mm256_mul_ps(offset, weight); - offset = _mm256_set_ps(calc_sum(nodes[7]->feature.rect[1], p_offset), - calc_sum(nodes[6]->feature.rect[1], p_offset), - calc_sum(nodes[5]->feature.rect[1], p_offset), - calc_sum(nodes[4]->feature.rect[1], p_offset), - calc_sum(nodes[3]->feature.rect[1], p_offset), - calc_sum(nodes[2]->feature.rect[1], p_offset), - calc_sum(nodes[1]->feature.rect[1], p_offset), - calc_sum(nodes[0]->feature.rect[1], p_offset)); + offset = _mm256_set_ps(calc_sumf(nodes[7]->feature.rect[1], p_offset), + calc_sumf(nodes[6]->feature.rect[1], p_offset), + calc_sumf(nodes[5]->feature.rect[1], p_offset), + calc_sumf(nodes[4]->feature.rect[1], p_offset), + calc_sumf(nodes[3]->feature.rect[1], p_offset), + calc_sumf(nodes[2]->feature.rect[1], p_offset), + calc_sumf(nodes[1]->feature.rect[1], p_offset), + calc_sumf(nodes[0]->feature.rect[1], p_offset)); weight = _mm256_set_ps(nodes[7]->feature.rect[1].weight, nodes[6]->feature.rect[1].weight, @@ -1075,21 +1081,21 @@ cvRunHaarClassifierCascadeSum( const CvHaarClassifierCascade* _cascade, sum = _mm256_add_ps(sum, _mm256_mul_ps(offset, weight)); if( nodes[0]->feature.rect[2].p0 ) - tmp[0] = calc_sum(nodes[0]->feature.rect[2],p_offset) * nodes[0]->feature.rect[2].weight; + tmp[0] = calc_sumf(nodes[0]->feature.rect[2],p_offset) * nodes[0]->feature.rect[2].weight; if( nodes[1]->feature.rect[2].p0 ) - tmp[1] = calc_sum(nodes[1]->feature.rect[2],p_offset) * nodes[1]->feature.rect[2].weight; + tmp[1] = calc_sumf(nodes[1]->feature.rect[2],p_offset) * nodes[1]->feature.rect[2].weight; if( nodes[2]->feature.rect[2].p0 ) - tmp[2] = calc_sum(nodes[2]->feature.rect[2],p_offset) * nodes[2]->feature.rect[2].weight; + tmp[2] = calc_sumf(nodes[2]->feature.rect[2],p_offset) * nodes[2]->feature.rect[2].weight; if( nodes[3]->feature.rect[2].p0 ) - tmp[3] = calc_sum(nodes[3]->feature.rect[2],p_offset) * nodes[3]->feature.rect[2].weight; + tmp[3] = calc_sumf(nodes[3]->feature.rect[2],p_offset) * nodes[3]->feature.rect[2].weight; if( nodes[4]->feature.rect[2].p0 ) - tmp[4] = calc_sum(nodes[4]->feature.rect[2],p_offset) * nodes[4]->feature.rect[2].weight; + tmp[4] = calc_sumf(nodes[4]->feature.rect[2],p_offset) * nodes[4]->feature.rect[2].weight; if( nodes[5]->feature.rect[2].p0 ) - tmp[5] = calc_sum(nodes[5]->feature.rect[2],p_offset) * nodes[5]->feature.rect[2].weight; + tmp[5] = calc_sumf(nodes[5]->feature.rect[2],p_offset) * nodes[5]->feature.rect[2].weight; if( nodes[6]->feature.rect[2].p0 ) - tmp[6] = calc_sum(nodes[6]->feature.rect[2],p_offset) * nodes[6]->feature.rect[2].weight; + tmp[6] = calc_sumf(nodes[6]->feature.rect[2],p_offset) * nodes[6]->feature.rect[2].weight; if( nodes[7]->feature.rect[2].p0 ) - tmp[7] = calc_sum(nodes[7]->feature.rect[2],p_offset) * nodes[7]->feature.rect[2].weight; + tmp[7] = calc_sumf(nodes[7]->feature.rect[2],p_offset) * nodes[7]->feature.rect[2].weight; sum = _mm256_add_ps(sum, _mm256_load_ps(tmp)); From ac96bb357c767b161e6240573c923c48526944a6 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 23 Oct 2012 15:04:38 +0400 Subject: [PATCH 05/36] Suppress more warnings in libtiff --- 3rdparty/libtiff/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/3rdparty/libtiff/CMakeLists.txt b/3rdparty/libtiff/CMakeLists.txt index dedcc39116..25ff0d94ed 100644 --- a/3rdparty/libtiff/CMakeLists.txt +++ b/3rdparty/libtiff/CMakeLists.txt @@ -95,6 +95,8 @@ ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244) # vs2008 ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4267 /wd4305 /wd4306) # vs2008 Win64 ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4703) # vs2012 +ocv_warnings_disable(CMAKE_C_FLAGS /wd4267 /wd4244 /wd4018) + if(UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR CV_ICC)) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") endif() From 1a500813f65b7ccb02accd4b628c830b43e46d4f Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 23 Oct 2012 18:14:13 +0400 Subject: [PATCH 06/36] Remove dead blobtrackingkalman.cpp --- modules/legacy/src/blobtrackingkalman.cpp | 176 ---------------------- 1 file changed, 176 deletions(-) delete mode 100644 modules/legacy/src/blobtrackingkalman.cpp diff --git a/modules/legacy/src/blobtrackingkalman.cpp b/modules/legacy/src/blobtrackingkalman.cpp deleted file mode 100644 index 3a0f03a88a..0000000000 --- a/modules/legacy/src/blobtrackingkalman.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/*======================= KALMAN FILTER AS TRACKER =========================*/ -/* State vector is (x,y,w,h,dx,dy,dw,dh). */ -/* Measurement is (x,y,w,h) */ - -/* Dynamic matrix A: */ -const float A8[] = { 1, 0, 0, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1}; - -/* Measurement matrix H: */ -const float H8[] = { 1, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0}; - -/* Matices for zero size velocity: */ -/* Dynamic matrix A: */ -const float A6[] = { 1, 0, 0, 0, 1, 0, - 0, 1, 0, 0, 0, 1, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 1}; - -/* Measurement matrix H: */ -const float H6[] = { 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 0, 0}; - -#define STATE_NUM 6 -#define A A6 -#define H H6 -class CvBlobTrackerOneKalman:public CvBlobTrackerOne -{ -private: - CvBlob m_Blob; - CvKalman* m_pKalman; - int m_Frame; - -public: - CvBlobTrackerOneKalman() - { - m_Frame = 0; - m_pKalman = cvCreateKalman(STATE_NUM,4); - memcpy( m_pKalman->transition_matrix->data.fl, A, sizeof(A)); - memcpy( m_pKalman->measurement_matrix->data.fl, H, sizeof(H)); - cvSetIdentity( m_pKalman->process_noise_cov, cvRealScalar(1e-5) ); - cvSetIdentity( m_pKalman->measurement_noise_cov, cvRealScalar(1e-1) ); - // CV_MAT_ELEM(*m_pKalman->measurement_noise_cov, float, 2,2) *= (float)pow(20,2); - // CV_MAT_ELEM(*m_pKalman->measurement_noise_cov, float, 3,3) *= (float)pow(20,2); - cvSetIdentity( m_pKalman->error_cov_post, cvRealScalar(1)); - cvZero(m_pKalman->state_post); - cvZero(m_pKalman->state_pre); - - SetModuleName("Kalman"); - } - - ~CvBlobTrackerOneKalman() - { - cvReleaseKalman(&m_pKalman); - } - - virtual void Init(CvBlob* pBlob, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL) - { - m_Blob = pBlob[0]; - m_pKalman->state_post->data.fl[0] = CV_BLOB_X(pBlob); - m_pKalman->state_post->data.fl[1] = CV_BLOB_Y(pBlob); - m_pKalman->state_post->data.fl[2] = CV_BLOB_WX(pBlob); - m_pKalman->state_post->data.fl[3] = CV_BLOB_WY(pBlob); - } - - virtual CvBlob* Process(CvBlob* pBlob, IplImage* /*pImg*/, IplImage* /*pImgFG*/ = NULL) - { - CvBlob* pBlobRes = &m_Blob; - float Z[4]; - CvMat Zmat = cvMat(4,1,CV_32F,Z); - m_Blob = pBlob[0]; - - if(m_Frame < 2) - { /* First call: */ - m_pKalman->state_post->data.fl[0+4] = CV_BLOB_X(pBlob)-m_pKalman->state_post->data.fl[0]; - m_pKalman->state_post->data.fl[1+4] = CV_BLOB_Y(pBlob)-m_pKalman->state_post->data.fl[1]; - if(m_pKalman->DP>6) - { - m_pKalman->state_post->data.fl[2+4] = CV_BLOB_WX(pBlob)-m_pKalman->state_post->data.fl[2]; - m_pKalman->state_post->data.fl[3+4] = CV_BLOB_WY(pBlob)-m_pKalman->state_post->data.fl[3]; - } - m_pKalman->state_post->data.fl[0] = CV_BLOB_X(pBlob); - m_pKalman->state_post->data.fl[1] = CV_BLOB_Y(pBlob); - m_pKalman->state_post->data.fl[2] = CV_BLOB_WX(pBlob); - m_pKalman->state_post->data.fl[3] = CV_BLOB_WY(pBlob); - memcpy(m_pKalman->state_pre->data.fl,m_pKalman->state_post->data.fl,sizeof(float)*STATE_NUM); - } - else - { /* Another call: */ - Z[0] = CV_BLOB_X(pBlob); - Z[1] = CV_BLOB_Y(pBlob); - Z[2] = CV_BLOB_WX(pBlob); - Z[3] = CV_BLOB_WY(pBlob); - cvKalmanCorrect(m_pKalman,&Zmat); - cvKalmanPredict(m_pKalman,0); - cvMatMulAdd(m_pKalman->measurement_matrix, m_pKalman->state_pre, NULL, &Zmat); - CV_BLOB_X(pBlobRes) = Z[0]; - CV_BLOB_Y(pBlobRes) = Z[1]; - CV_BLOB_WX(pBlobRes) = Z[2]; - CV_BLOB_WY(pBlobRes) = Z[3]; - } - m_Frame++; - return pBlobRes; - } - virtual void Release() - { - delete this; - } -}; /* class CvBlobTrackerOneKalman */ - -#if 0 -static CvBlobTrackerOne* cvCreateModuleBlobTrackerOneKalman() -{ - return (CvBlobTrackerOne*) new CvBlobTrackerOneKalman; -} - - -CvBlobTracker* cvCreateBlobTrackerKalman() -{ - return cvCreateBlobTrackerList(cvCreateModuleBlobTrackerOneKalman); -} -#endif From a32004f90cfd20859f9dc906a460a35fc0ac00e3 Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Fri, 28 Sep 2012 16:12:59 +0400 Subject: [PATCH 07/36] adding initial version of a sample with new Camera-View handling design --- samples/android/CMakeLists.txt | 2 + samples/android/camera-preview/.classpath | 8 + samples/android/camera-preview/.project | 33 ++ .../.settings/org.eclipse.jdt.core.prefs | 5 + .../camera-preview/AndroidManifest.xml | 27 ++ samples/android/camera-preview/CMakeLists.txt | 6 + .../res/drawable/ic_action_search.png | Bin 0 -> 3120 bytes .../res/drawable/ic_launcher.png | Bin 0 -> 3014 bytes .../res/layout/activity_camera_writer.xml | 13 + .../res/menu/activity_camera_writer.xml | 6 + .../camera-preview/res/values-v11/styles.xml | 5 + .../camera-preview/res/values/strings.xml | 7 + .../camera-preview/res/values/styles.xml | 5 + .../camerawriter/CameraWriterActivity.java | 72 +++++ .../OpenCvCameraBridgeViewBase.java | 301 ++++++++++++++++++ .../camerawriter/OpenCvNativeCameraView.java | 126 ++++++++ 16 files changed, 616 insertions(+) create mode 100644 samples/android/camera-preview/.classpath create mode 100644 samples/android/camera-preview/.project create mode 100644 samples/android/camera-preview/.settings/org.eclipse.jdt.core.prefs create mode 100644 samples/android/camera-preview/AndroidManifest.xml create mode 100644 samples/android/camera-preview/CMakeLists.txt create mode 100644 samples/android/camera-preview/res/drawable/ic_action_search.png create mode 100644 samples/android/camera-preview/res/drawable/ic_launcher.png create mode 100644 samples/android/camera-preview/res/layout/activity_camera_writer.xml create mode 100644 samples/android/camera-preview/res/menu/activity_camera_writer.xml create mode 100644 samples/android/camera-preview/res/values-v11/styles.xml create mode 100644 samples/android/camera-preview/res/values/strings.xml create mode 100644 samples/android/camera-preview/res/values/styles.xml create mode 100644 samples/android/camera-preview/src/org/opencv/test/camerawriter/CameraWriterActivity.java create mode 100644 samples/android/camera-preview/src/org/opencv/test/camerawriter/OpenCvCameraBridgeViewBase.java create mode 100644 samples/android/camera-preview/src/org/opencv/test/camerawriter/OpenCvNativeCameraView.java diff --git a/samples/android/CMakeLists.txt b/samples/android/CMakeLists.txt index bf96bdf5a2..097e02d8ce 100644 --- a/samples/android/CMakeLists.txt +++ b/samples/android/CMakeLists.txt @@ -17,6 +17,8 @@ add_subdirectory(tutorial-2-opencvcamera) add_subdirectory(tutorial-3-native) add_subdirectory(tutorial-4-mixed) +add_subdirectory(camera-preview) + #hello-android sample if(HAVE_opencv_highgui) ocv_include_modules_recurse(opencv_highgui opencv_core) diff --git a/samples/android/camera-preview/.classpath b/samples/android/camera-preview/.classpath new file mode 100644 index 0000000000..a4763d1eec --- /dev/null +++ b/samples/android/camera-preview/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/samples/android/camera-preview/.project b/samples/android/camera-preview/.project new file mode 100644 index 0000000000..d8e9953e80 --- /dev/null +++ b/samples/android/camera-preview/.project @@ -0,0 +1,33 @@ + + + CameraWriter + + + + + + 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/camera-preview/.settings/org.eclipse.jdt.core.prefs b/samples/android/camera-preview/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..53e0495157 --- /dev/null +++ b/samples/android/camera-preview/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Wed Jun 29 04:36:40 MSD 2011 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/samples/android/camera-preview/AndroidManifest.xml b/samples/android/camera-preview/AndroidManifest.xml new file mode 100644 index 0000000000..8be9e9485e --- /dev/null +++ b/samples/android/camera-preview/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/android/camera-preview/CMakeLists.txt b/samples/android/camera-preview/CMakeLists.txt new file mode 100644 index 0000000000..b04c24a37e --- /dev/null +++ b/samples/android/camera-preview/CMakeLists.txt @@ -0,0 +1,6 @@ +set(sample example-camera-preview) + +add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11 ${ANDROID_SDK_TARGET}) +if(TARGET ${sample}) + add_dependencies(opencv_android_examples ${sample}) +endif() diff --git a/samples/android/camera-preview/res/drawable/ic_action_search.png b/samples/android/camera-preview/res/drawable/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..67de12decbd60613f6716de113daae46dc7d6ff9 GIT binary patch literal 3120 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 + + + + + diff --git a/samples/android/camera-preview/res/menu/activity_camera_writer.xml b/samples/android/camera-preview/res/menu/activity_camera_writer.xml new file mode 100644 index 0000000000..cfc10fd52e --- /dev/null +++ b/samples/android/camera-preview/res/menu/activity_camera_writer.xml @@ -0,0 +1,6 @@ + + + diff --git a/samples/android/camera-preview/res/values-v11/styles.xml b/samples/android/camera-preview/res/values-v11/styles.xml new file mode 100644 index 0000000000..d408cbc37a --- /dev/null +++ b/samples/android/camera-preview/res/values-v11/styles.xml @@ -0,0 +1,5 @@ + + +