Merge branch 2.4

pull/258/merge
Andrey Kamaev 12 years ago
commit 13b6a3a15e
  1. 1
      CMakeLists.txt
  2. 23
      modules/androidcamera/src/camera_activity.cpp
  3. 8
      modules/calib3d/src/calibration.cpp
  4. 4
      modules/contrib/src/chamfermatching.cpp
  5. 2
      modules/contrib/src/spinimages.cpp
  6. 3
      modules/core/include/opencv2/core/operations.hpp
  7. 2
      modules/core/src/command_line_parser.cpp
  8. 18
      modules/core/src/matrix.cpp
  9. 4
      modules/features2d/perf/perf_batchDistance.cpp
  10. 6
      modules/features2d/src/keypoint.cpp
  11. 6
      modules/features2d/src/matchers.cpp
  12. 2
      modules/features2d/src/precomp.hpp
  13. 2
      modules/stitching/src/autocalib.cpp
  14. 2
      modules/stitching/src/stitcher.cpp
  15. 11
      modules/ts/include/opencv2/ts/ts_gtest.h
  16. 2
      modules/videostab/src/inpainting.cpp
  17. 1
      samples/c/facedetect.cpp
  18. 4
      samples/cpp/bagofwords_classification.cpp
  19. 2
      samples/cpp/calibration.cpp
  20. 4
      samples/cpp/tutorial_code/core/how_to_scan_images/how_to_scan_images.cpp

@ -565,6 +565,7 @@ if(ANDROID)
status("") status("")
status(" Android: ") status(" Android: ")
status(" Android ABI:" ${ANDROID_ABI}) status(" Android ABI:" ${ANDROID_ABI})
status(" STL type:" ${ANDROID_STL})
status(" Native API level:" android-${ANDROID_NATIVE_API_LEVEL}) status(" Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
status(" SDK target:" "${ANDROID_SDK_TARGET}") status(" SDK target:" "${ANDROID_SDK_TARGET}")
if(BUILD_WITH_ANDROID_NDK) if(BUILD_WITH_ANDROID_NDK)

@ -3,6 +3,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <dirent.h> #include <dirent.h>
#include <android/log.h> #include <android/log.h>
#include <cctype>
#include <string> #include <string>
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
@ -303,8 +304,8 @@ std::string CameraWrapperConnector::getPathLibFolder()
LOGD("Library name: %s", dl_info.dli_fname); LOGD("Library name: %s", dl_info.dli_fname);
LOGD("Library base address: %p", dl_info.dli_fbase); LOGD("Library base address: %p", dl_info.dli_fbase);
const char* libName=dl_info.dli_fname; const char* libName=dl_info.dli_fname;
while( ((*libName)=='/') || ((*libName)=='.') ) while( ((*libName)=='/') || ((*libName)=='.') )
libName++; libName++;
char lineBuf[2048]; char lineBuf[2048];
@ -312,9 +313,9 @@ std::string CameraWrapperConnector::getPathLibFolder()
if(file) if(file)
{ {
while (fgets(lineBuf, sizeof lineBuf, file) != NULL) while (fgets(lineBuf, sizeof lineBuf, file) != NULL)
{ {
//verify that line ends with library name //verify that line ends with library name
int lineLength = strlen(lineBuf); int lineLength = strlen(lineBuf);
int libNameLength = strlen(libName); int libNameLength = strlen(libName);
@ -327,7 +328,7 @@ std::string CameraWrapperConnector::getPathLibFolder()
if (0 != strncmp(lineBuf + lineLength - libNameLength, libName, libNameLength)) if (0 != strncmp(lineBuf + lineLength - libNameLength, libName, libNameLength))
{ {
//the line does not contain the library name //the line does not contain the library name
continue; continue;
} }
@ -346,18 +347,18 @@ std::string CameraWrapperConnector::getPathLibFolder()
fclose(file); fclose(file);
return pathBegin; return pathBegin;
} }
fclose(file); fclose(file);
LOGE("Could not find library path"); LOGE("Could not find library path");
} }
else else
{ {
LOGE("Could not read /proc/self/smaps"); LOGE("Could not read /proc/self/smaps");
} }
} }
else else
{ {
LOGE("Could not get library name and base address"); LOGE("Could not get library name and base address");
} }
return string(); return string();

@ -2778,17 +2778,13 @@ CV_IMPL int cvStereoRectifyUncalibrated(
cvPerspectiveTransform( _m1, _m1, &H0 ); cvPerspectiveTransform( _m1, _m1, &H0 );
cvPerspectiveTransform( _m2, _m2, &H2 ); cvPerspectiveTransform( _m2, _m2, &H2 );
CvMat A = cvMat( 1, npoints, CV_64FC3, lines1 ), BxBy, B; CvMat A = cvMat( 1, npoints, CV_64FC3, lines1 ), BxBy, B;
double a[9], atb[3], x[3]; double x[3];
CvMat AtA = cvMat( 3, 3, CV_64F, a );
CvMat AtB = cvMat( 3, 1, CV_64F, atb );
CvMat X = cvMat( 3, 1, CV_64F, x ); CvMat X = cvMat( 3, 1, CV_64F, x );
cvConvertPointsHomogeneous( _m1, &A ); cvConvertPointsHomogeneous( _m1, &A );
cvReshape( &A, &A, 1, npoints ); cvReshape( &A, &A, 1, npoints );
cvReshape( _m2, &BxBy, 1, npoints ); cvReshape( _m2, &BxBy, 1, npoints );
cvGetCol( &BxBy, &B, 0 ); cvGetCol( &BxBy, &B, 0 );
cvGEMM( &A, &A, 1, 0, 0, &AtA, CV_GEMM_A_T ); cvSolve( &A, &B, &X, CV_SVD );
cvGEMM( &A, &B, 1, 0, 0, &AtB, CV_GEMM_A_T );
cvSolve( &AtA, &AtB, &X, CV_SVD_SYM );
double ha[] = double ha[] =
{ {

@ -767,8 +767,8 @@ void ChamferMatcher::Matching::findContourOrientations(const template_coords_t&
} }
// get the middle two angles // get the middle two angles
nth_element(angles.begin(), angles.begin()+M-1, angles.end()); std::nth_element(angles.begin(), angles.begin()+M-1, angles.end());
nth_element(angles.begin()+M-1, angles.begin()+M, angles.end()); std::nth_element(angles.begin()+M-1, angles.begin()+M, angles.end());
// sort(angles.begin(), angles.end()); // sort(angles.begin(), angles.end());
// average them to compute tangent // average them to compute tangent

@ -85,7 +85,7 @@ namespace
}; };
size_t colors_mum = sizeof(colors)/sizeof(colors[0]); size_t colors_mum = sizeof(colors)/sizeof(colors[0]);
#if defined __cplusplus && __cplusplus > 199711L #if (defined __cplusplus && __cplusplus > 199711L) || defined _STLPORT_MAJOR
#else #else
template<class FwIt, class T> void iota(FwIt first, FwIt last, T value) { while(first != last) *first++ = value++; } template<class FwIt, class T> void iota(FwIt first, FwIt last, T value) { while(first != last) *first++ = value++; }
#endif #endif

@ -65,7 +65,8 @@
#elif __GNUC__*10 + __GNUC_MINOR__ >= 42 #elif __GNUC__*10 + __GNUC_MINOR__ >= 42
#if !(defined WIN32 || defined _WIN32) && (defined __i486__ || defined __i586__ || \ #if !(defined WIN32 || defined _WIN32) && (defined __i486__ || defined __i586__ || \
defined __i686__ || defined __MMX__ || defined __SSE__ || defined __ppc__) defined __i686__ || defined __MMX__ || defined __SSE__ || defined __ppc__) || \
(defined __GNUC__ && defined _STLPORT_MAJOR)
#define CV_XADD __sync_fetch_and_add #define CV_XADD __sync_fetch_and_add
#else #else
#include <ext/atomicity.h> #include <ext/atomicity.h>

@ -295,7 +295,7 @@ void CommandLineParser::Impl::sort_params()
sort(data[i].keys.begin(), data[i].keys.end()); sort(data[i].keys.begin(), data[i].keys.end());
} }
sort (data.begin(), data.end(), cmp_params); std::sort (data.begin(), data.end(), cmp_params);
} }
string CommandLineParser::Impl::cat_string(const string& str) const string CommandLineParser::Impl::cat_string(const string& str) const

@ -1186,6 +1186,24 @@ Size _InputArray::size(int i) const
size_t _InputArray::total(int i) const size_t _InputArray::total(int i) const
{ {
int k = kind();
if( k == MAT )
{
CV_Assert( i < 0 );
return ((const Mat*)obj)->total();
}
if( k == STD_VECTOR_MAT )
{
const vector<Mat>& vv = *(const vector<Mat>*)obj;
if( i < 0 )
return vv.size();
CV_Assert( i < (int)vv.size() );
return vv[i].total();
}
return size(i).area(); return size(i).area();
} }

@ -150,7 +150,7 @@ void generateData( Mat& query, Mat& train, const int sourceType )
// in ascending order. General boundaries of the perturbation // in ascending order. General boundaries of the perturbation
// are (0.f, 1.f). // are (0.f, 1.f).
train.create( query.rows*countFactor, query.cols, sourceType ); train.create( query.rows*countFactor, query.cols, sourceType );
float step = 1.f / countFactor; float step = (sourceType == CV_8U ? 256.f : 1.f) / countFactor;
for( int qIdx = 0; qIdx < query.rows; qIdx++ ) for( int qIdx = 0; qIdx < query.rows; qIdx++ )
{ {
Mat queryDescriptor = query.row(qIdx); Mat queryDescriptor = query.row(qIdx);
@ -161,7 +161,7 @@ void generateData( Mat& query, Mat& train, const int sourceType )
queryDescriptor.copyTo( trainDescriptor ); queryDescriptor.copyTo( trainDescriptor );
int elem = rng(dim); int elem = rng(dim);
float diff = rng.uniform( step*c, step*(c+1) ); float diff = rng.uniform( step*c, step*(c+1) );
trainDescriptor.at<float>(0, elem) += diff; trainDescriptor.col(elem) += diff;
} }
} }
} }

@ -232,7 +232,7 @@ void KeyPointsFilter::runByImageBorder( vector<KeyPoint>& keypoints, Size imageS
if (imageSize.height <= borderSize * 2 || imageSize.width <= borderSize * 2) if (imageSize.height <= borderSize * 2 || imageSize.width <= borderSize * 2)
keypoints.clear(); keypoints.clear();
else else
keypoints.erase( remove_if(keypoints.begin(), keypoints.end(), keypoints.erase( std::remove_if(keypoints.begin(), keypoints.end(),
RoiPredicate(Rect(Point(borderSize, borderSize), RoiPredicate(Rect(Point(borderSize, borderSize),
Point(imageSize.width - borderSize, imageSize.height - borderSize)))), Point(imageSize.width - borderSize, imageSize.height - borderSize)))),
keypoints.end() ); keypoints.end() );
@ -259,7 +259,7 @@ void KeyPointsFilter::runByKeypointSize( vector<KeyPoint>& keypoints, float minS
CV_Assert( maxSize >= 0); CV_Assert( maxSize >= 0);
CV_Assert( minSize <= maxSize ); CV_Assert( minSize <= maxSize );
keypoints.erase( remove_if(keypoints.begin(), keypoints.end(), SizePredicate(minSize, maxSize)), keypoints.erase( std::remove_if(keypoints.begin(), keypoints.end(), SizePredicate(minSize, maxSize)),
keypoints.end() ); keypoints.end() );
} }
@ -282,7 +282,7 @@ void KeyPointsFilter::runByPixelsMask( vector<KeyPoint>& keypoints, const Mat& m
if( mask.empty() ) if( mask.empty() )
return; return;
keypoints.erase(remove_if(keypoints.begin(), keypoints.end(), MaskPredicate(mask)), keypoints.end()); keypoints.erase(std::remove_if(keypoints.begin(), keypoints.end(), MaskPredicate(mask)), keypoints.end());
} }
struct KeyPoint_LessThan struct KeyPoint_LessThan

@ -77,7 +77,7 @@ DescriptorMatcher::DescriptorCollection::DescriptorCollection()
DescriptorMatcher::DescriptorCollection::DescriptorCollection( const DescriptorCollection& collection ) DescriptorMatcher::DescriptorCollection::DescriptorCollection( const DescriptorCollection& collection )
{ {
mergedDescriptors = collection.mergedDescriptors.clone(); mergedDescriptors = collection.mergedDescriptors.clone();
copy( collection.startIdxs.begin(), collection.startIdxs.begin(), startIdxs.begin() ); std::copy( collection.startIdxs.begin(), collection.startIdxs.begin(), startIdxs.begin() );
} }
DescriptorMatcher::DescriptorCollection::~DescriptorCollection() DescriptorMatcher::DescriptorCollection::~DescriptorCollection()
@ -807,9 +807,9 @@ GenericDescriptorMatcher::KeyPointCollection::KeyPointCollection( const KeyPoint
keypoints.resize( collection.keypoints.size() ); keypoints.resize( collection.keypoints.size() );
for( size_t i = 0; i < keypoints.size(); i++ ) for( size_t i = 0; i < keypoints.size(); i++ )
copy( collection.keypoints[i].begin(), collection.keypoints[i].end(), keypoints[i].begin() ); std::copy( collection.keypoints[i].begin(), collection.keypoints[i].end(), keypoints[i].begin() );
copy( collection.startIndices.begin(), collection.startIndices.end(), startIndices.begin() ); std::copy( collection.startIndices.begin(), collection.startIndices.end(), startIndices.begin() );
} }
void GenericDescriptorMatcher::KeyPointCollection::add( const vector<Mat>& _images, void GenericDescriptorMatcher::KeyPointCollection::add( const vector<Mat>& _images,

@ -52,6 +52,8 @@
#include "opencv2/imgproc/imgproc_c.h" #include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/core/internal.hpp" #include "opencv2/core/internal.hpp"
#include <algorithm>
#ifdef HAVE_TEGRA_OPTIMIZATION #ifdef HAVE_TEGRA_OPTIMIZATION
#include "opencv2/features2d/features2d_tegra.hpp" #include "opencv2/features2d/features2d_tegra.hpp"
#endif #endif

@ -122,7 +122,7 @@ void estimateFocal(const vector<ImageFeatures> &features, const vector<MatchesIn
{ {
double median; double median;
sort(all_focals.begin(), all_focals.end()); std::sort(all_focals.begin(), all_focals.end());
if (all_focals.size() % 2 == 1) if (all_focals.size() % 2 == 1)
median = all_focals[all_focals.size() / 2]; median = all_focals[all_focals.size() / 2];
else else

@ -468,7 +468,7 @@ void Stitcher::estimateCameraParams()
focals.push_back(cameras_[i].focal); focals.push_back(cameras_[i].focal);
} }
sort(focals.begin(), focals.end()); std::sort(focals.begin(), focals.end());
if (focals.size() % 2 == 1) if (focals.size() % 2 == 1)
warped_image_scale_ = static_cast<float>(focals[focals.size() / 2]); warped_image_scale_ = static_cast<float>(focals[focals.size() / 2]);
else else

@ -564,7 +564,7 @@
# define GTEST_HAS_RTTI 0 # define GTEST_HAS_RTTI 0
# else # else
# define GTEST_HAS_RTTI 1 # define GTEST_HAS_RTTI 1
# endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS # endif // GTEST_OS_LINUX_ANDROID && _STLPORT_MAJOR && !__EXCEPTIONS
# else # else
# define GTEST_HAS_RTTI 0 # define GTEST_HAS_RTTI 0
# endif // __GXX_RTTI # endif // __GXX_RTTI
@ -650,8 +650,11 @@
// support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, // support TR1 tuple. libc++ only provides std::tuple, in C++11 mode,
// and it can be used with some compilers that define __GNUC__. // and it can be used with some compilers that define __GNUC__.
# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ # if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \
&& !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) || _MSC_VER >= 1600 && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) && !defined(_STLPORT_MAJOR) \
|| (defined(_MSC_VER) && _MSC_VER >= 1600)
# define GTEST_ENV_HAS_TR1_TUPLE_ 1 # define GTEST_ENV_HAS_TR1_TUPLE_ 1
# else
# define GTEST_ENV_HAS_TR1_TUPLE_ 0
# endif # endif
// C++11 specifies that <tuple> provides std::tuple. Use that if gtest is used // C++11 specifies that <tuple> provides std::tuple. Use that if gtest is used
@ -659,7 +662,7 @@
// can build with clang but need to use gcc4.2's libstdc++). // can build with clang but need to use gcc4.2's libstdc++).
# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) # if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325)
# define GTEST_ENV_HAS_STD_TUPLE_ 1 # define GTEST_ENV_HAS_STD_TUPLE_ 1
#else # else
# define GTEST_ENV_HAS_STD_TUPLE_ 0 # define GTEST_ENV_HAS_STD_TUPLE_ 0
# endif # endif
@ -667,6 +670,8 @@
# define GTEST_USE_OWN_TR1_TUPLE 0 # define GTEST_USE_OWN_TR1_TUPLE 0
# else # else
# define GTEST_USE_OWN_TR1_TUPLE 1 # define GTEST_USE_OWN_TR1_TUPLE 1
# undef GTEST_HAS_TR1_TUPLE
# define GTEST_HAS_TR1_TUPLE 1
# endif # endif
#endif // GTEST_USE_OWN_TR1_TUPLE #endif // GTEST_USE_OWN_TR1_TUPLE

@ -174,7 +174,7 @@ void ConsistentMosaicInpainter::inpaint(int idx, Mat &frame, Mat &mask)
if (var < stdevThresh_ * stdevThresh_) if (var < stdevThresh_ * stdevThresh_)
{ {
sort(pixels.begin(), pixels.begin() + n); std::sort(pixels.begin(), pixels.begin() + n);
int nh = (n-1)/2; int nh = (n-1)/2;
int c1 = pixels[nh].color.x; int c1 = pixels[nh].color.x;
int c2 = pixels[nh].color.y; int c2 = pixels[nh].color.y;

@ -2,6 +2,7 @@
#include "opencv2/highgui/highgui.hpp" #include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/imgproc/imgproc.hpp"
#include <cctype>
#include <iostream> #include <iostream>
#include <iterator> #include <iterator>
#include <stdio.h> #include <stdio.h>

@ -1453,7 +1453,7 @@ void VocData::readClassifierGroundTruth(const string& filename, vector<string>&
string line; string line;
string image; string image;
int obj_present; int obj_present = 0;
while (!gtfile.eof()) while (!gtfile.eof())
{ {
std::getline(gtfile,line); std::getline(gtfile,line);
@ -1826,7 +1826,7 @@ void VocData::readFileToString(const string filename, string& file_contents)
int VocData::stringToInteger(const string input_str) int VocData::stringToInteger(const string input_str)
{ {
int result; int result = 0;
stringstream ss(input_str); stringstream ss(input_str);
if ((ss >> result).fail()) if ((ss >> result).fail())

@ -2,6 +2,8 @@
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp" #include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp" #include "opencv2/highgui/highgui.hpp"
#include <cctype>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>

@ -45,11 +45,11 @@ int main( int argc, char* argv[])
return -1; return -1;
} }
int divideWith; // convert our input string to number - C++ style int divideWith = 0; // convert our input string to number - C++ style
stringstream s; stringstream s;
s << argv[2]; s << argv[2];
s >> divideWith; s >> divideWith;
if (!s) if (!s || !divideWith)
{ {
cout << "Invalid number entered for dividing. " << endl; cout << "Invalid number entered for dividing. " << endl;
return -1; return -1;

Loading…
Cancel
Save