1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-31 00:03:03 +04:00

Compare commits

..

33 Commits

Author SHA1 Message Date
Alexander Smorkalov e6f3f3c029 OpenCV version++. 2015-09-17 14:02:36 +03:00
Ilya Lavrenov 7746d9b7cc fix for corrent modules dependencies
(cherry picked from commit 1c3d83df54)
2015-09-17 13:45:08 +03:00
Vladislav Vinogradov 3494d640df add extra checks to data_step_down to prevent out-of-border access
(cherry picked from commit 3ef067cc65)
2015-09-17 13:44:56 +03:00
Vladislav Vinogradov c22cc67ba8 revert previous change in gpu::StereoBeliefPropogation
(cherry picked from commit f903192c17)
2015-09-17 13:44:33 +03:00
Vladislav Vinogradov 558054a53d fix for gpu::StereoBeliefPropogation:
use continuous memory for internal buffers

(cherry picked from commit e2a9df408f)
2015-09-17 13:44:17 +03:00
Elena Shipunova c7b471f10f do not proceed with removing zero-length slice
(cherry picked from commit 036c3b4e6d)
2015-09-17 13:43:54 +03:00
Ilya Lavrenov f4ffcae8d9 initialize padding of CvString with zeros
(cherry picked from commit 7b1eb3af7b)
2015-09-17 13:43:37 +03:00
Ilya Lavrenov 0422054aa1 fixed warnings in gpu module
(cherry picked from commit 6a05939e1c)
2015-09-17 13:41:51 +03:00
Ilya Lavrenov a81f0a5123 fixed uninitialized memory writing/reading in flann
(cherry picked from commit 3934d61de7)
2015-09-17 13:41:31 +03:00
Ilya Lavrenov c36582d2df fixed memory leak in flann index
(cherry picked from commit 32d7c1950a)
2015-09-17 13:41:16 +03:00
Ilya Lavrenov d50c07e303 fixed "Conditional jump or move depends on uninitialised value(s)" in GBD
(cherry picked from commit 887736bcd4)
2015-09-17 13:41:03 +03:00
Ilya Lavrenov 54693b3fa7 fixed memory leak in GBTrees
(cherry picked from commit 1b8c2589c0)
2015-09-17 13:40:50 +03:00
Ilya Lavrenov 3c3bc123fc release filestorage before exception
(cherry picked from commit 3a1bb93340)
2015-09-17 13:40:36 +03:00
Ilya Lavrenov ac33cd688c fixed memory leak in ANN
(cherry picked from commit dfb49097e3)
2015-09-17 13:40:14 +03:00
Ilya Lavrenov b5e42d8cc1 fixed memory leak in ml module
(cherry picked from commit d7bb1025f3)
2015-09-17 13:40:02 +03:00
Ilya Lavrenov 7e4e8921bc fixed memory leak in descriptor regression tests 2015-09-17 13:39:44 +03:00
Ilya Lavrenov 6dcd455ac4 fixed memory leaks in modules/features2d/test/test_nearestneighbors.cpp 2015-09-17 13:39:34 +03:00
Vladislav Vinogradov 1d58e1a14a fix potential out-of-border access in gpu StereoBeliefPropagation 2015-09-17 13:39:17 +03:00
Roman Donchenko d122510c4f Only conflict with packages corresponding to modules that are built 2015-09-17 13:39:03 +03:00
Roman Donchenko 6613d14261 Add missing packages to the Debian conflict list
And refactor the code to make sure that the dev and runtime package lists are
in sync.
2015-09-17 13:38:52 +03:00
a-andre a14e524b32 fix documentation builder warnings 2015-09-17 13:38:25 +03:00
a-andre 226ff93917 install new headers like "opencv2/core.hpp" 2015-09-17 13:38:11 +03:00
Ilya Lavrenov d28e6c9b36 fixed memory leak caused by illegal memory access
(cherry picked from commit 4722b2d0e5)
2015-09-17 13:37:52 +03:00
Ilya Lavrenov c16f465ff5 fixed "Conditional jump or move depends on uninitialised value" warning
(cherry picked from commit f100cdb6d4)
2015-09-17 13:37:38 +03:00
Roman Donchenko 3231c2f995 NearestNeighborTest: use ts->get_rng() instead of (implicit) theRNG()
This ensures that test data is not dependent on the order the tests are
executed in.

(cherry picked from commit 1245cd1752)
2015-09-17 13:37:26 +03:00
Ilya Lavrenov 16bcc30e42 typo
(cherry picked from commit 793bdaada7)
2015-09-17 13:37:12 +03:00
Ilya Lavrenov 69c50e0181 fixed typo
(cherry picked from commit 370d1ff21a)
2015-09-17 13:37:02 +03:00
Ilya Lavrenov 486c40f578 fixed uninitialized values warning in bad arg test class
(cherry picked from commit 47cee8715b)
2015-09-17 13:36:51 +03:00
Ilya Lavrenov 08e38e9ff9 fixed memory leaks in warpAffine tests
(cherry picked from commit b70e27e076)
2015-09-17 13:36:35 +03:00
Ilya Lavrenov ba3b902da7 fixed memory leaks in floodfill tests
(cherry picked from commit d1b882ddcf)
2015-09-17 13:36:24 +03:00
Ilya Lavrenov bf94e6a91c fixed memory leaks in cvtyuv tests
(cherry picked from commit b2489d31d6)
2015-09-17 13:36:14 +03:00
Ilya Lavrenov ecc53dd7a4 fixed memory leak in core ds tests
(cherry picked from commit 7719da9552)
2015-09-17 13:35:51 +03:00
Ilya Lavrenov fc0e0239b8 fixed valgrind warning in polylines
(cherry picked from commit 855765986e)
2015-09-17 13:35:25 +03:00
28 changed files with 164 additions and 101 deletions
+4 -2
View File
@@ -49,6 +49,8 @@ foreach(mod ${OPENCV_MODULES_BUILD} ${OPENCV_MODULES_DISABLED_USER} ${OPENCV_MOD
if(HAVE_${mod}) if(HAVE_${mod})
unset(HAVE_${mod} CACHE) unset(HAVE_${mod} CACHE)
endif() endif()
unset(OPENCV_MODULE_${mod}_DEPS CACHE)
unset(OPENCV_MODULE_${mod}_DEPS_EXT CACHE)
unset(OPENCV_MODULE_${mod}_REQ_DEPS CACHE) unset(OPENCV_MODULE_${mod}_REQ_DEPS CACHE)
unset(OPENCV_MODULE_${mod}_OPT_DEPS CACHE) unset(OPENCV_MODULE_${mod}_OPT_DEPS CACHE)
unset(OPENCV_MODULE_${mod}_PRIVATE_REQ_DEPS CACHE) unset(OPENCV_MODULE_${mod}_PRIVATE_REQ_DEPS CACHE)
@@ -488,7 +490,7 @@ macro(ocv_glob_module_sources)
file(GLOB_RECURSE lib_srcs "src/*.cpp") file(GLOB_RECURSE lib_srcs "src/*.cpp")
file(GLOB_RECURSE lib_int_hdrs "src/*.hpp" "src/*.h") file(GLOB_RECURSE lib_int_hdrs "src/*.hpp" "src/*.h")
file(GLOB lib_hdrs "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h") file(GLOB lib_hdrs "include/opencv2/*.hpp" "include/opencv2/${name}/*.hpp" "include/opencv2/${name}/*.h")
file(GLOB lib_hdrs_detail "include/opencv2/${name}/detail/*.hpp" "include/opencv2/${name}/detail/*.h") file(GLOB lib_hdrs_detail "include/opencv2/${name}/detail/*.hpp" "include/opencv2/${name}/detail/*.h")
file(GLOB_RECURSE lib_srcs_apple "src/*.mm") file(GLOB_RECURSE lib_srcs_apple "src/*.mm")
if (APPLE) if (APPLE)
@@ -629,7 +631,7 @@ macro(ocv_create_module)
if(OPENCV_MODULE_${the_module}_HEADERS AND ";${OPENCV_MODULES_PUBLIC};" MATCHES ";${the_module};") if(OPENCV_MODULE_${the_module}_HEADERS AND ";${OPENCV_MODULES_PUBLIC};" MATCHES ";${the_module};")
foreach(hdr ${OPENCV_MODULE_${the_module}_HEADERS}) foreach(hdr ${OPENCV_MODULE_${the_module}_HEADERS})
string(REGEX REPLACE "^.*opencv2/" "opencv2/" hdr2 "${hdr}") string(REGEX REPLACE "^.*opencv2/" "opencv2/" hdr2 "${hdr}")
if(hdr2 MATCHES "^(opencv2/.*)/[^/]+.h(..)?$") if(hdr2 MATCHES "^(opencv2/?.*)/[^/]+.h(..)?$")
install(FILES ${hdr} DESTINATION "${OPENCV_INCLUDE_INSTALL_PATH}/${CMAKE_MATCH_1}" COMPONENT dev) install(FILES ${hdr} DESTINATION "${OPENCV_INCLUDE_INSTALL_PATH}/${CMAKE_MATCH_1}" COMPONENT dev)
endif() endif()
endforeach() endforeach()
+9 -8
View File
@@ -115,15 +115,16 @@ if(HAVE_TBB AND NOT BUILD_TBB)
endif() endif()
endif() endif()
set(STD_OPENCV_LIBS opencv-data libopencv-calib3d2.4 libopencv-contrib2.4 libopencv-core2.4 set(STD_OPENCV_LIBS opencv-data)
libopencv-features2d2.4 libopencv-flann2.4 libopencv-gpu2.4 libopencv-imgproc2.4 set(STD_OPENCV_DEV libopencv-dev)
libopencv-ml2.4 libopencv-ocl2.4 libopencv-stitching2.4 libopencv-ts2.4 libopencv-videostab2.4)
set(STD_OPENCV_DEV libopencv-calib3d-dev libopencv-contrib-dev libopencv-core-dev foreach(module calib3d contrib core features2d flann gpu highgui imgproc legacy
libopencv-dev libopencv-features2d-dev libopencv-flann-dev libopencv-gpu-dev ml objdetect ocl photo stitching superres ts video videostab)
libopencv-highgui-dev libopencv-imgproc-dev libopencv-legacy-dev libopencv-ml-dev if(HAVE_opencv_${module})
libopencv-objdetect-dev libopencv-ocl-dev libopencv-photo-dev libopencv-stitching-dev list(APPEND STD_OPENCV_LIBS "libopencv-${module}2.4")
libopencv-superres-dev libopencv-ts-dev libopencv-video-dev libopencv-videostab-dev) list(APPEND STD_OPENCV_DEV "libopencv-${module}-dev")
endif()
endforeach()
string(REPLACE ";" ", " CPACK_COMPONENT_LIBS_CONFLICTS "${STD_OPENCV_LIBS}") string(REPLACE ";" ", " CPACK_COMPONENT_LIBS_CONFLICTS "${STD_OPENCV_LIBS}")
string(REPLACE ";" ", " CPACK_COMPONENT_LIBS_PROVIDES "${STD_OPENCV_LIBS}") string(REPLACE ";" ", " CPACK_COMPONENT_LIBS_PROVIDES "${STD_OPENCV_LIBS}")
-3
View File
@@ -1,6 +1,3 @@
/*! \file core.hpp
\brief The Core Functionality
*/
/*M/////////////////////////////////////////////////////////////////////////////////////// /*M///////////////////////////////////////////////////////////////////////////////////////
// //
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
@@ -1,6 +1,3 @@
/*! \file core.hpp
\brief The Core Functionality
*/
/*M/////////////////////////////////////////////////////////////////////////////////////// /*M///////////////////////////////////////////////////////////////////////////////////////
// //
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
@@ -50,7 +50,7 @@
#define CV_VERSION_EPOCH 2 #define CV_VERSION_EPOCH 2
#define CV_VERSION_MAJOR 4 #define CV_VERSION_MAJOR 4
#define CV_VERSION_MINOR 12 #define CV_VERSION_MINOR 12
#define CV_VERSION_REVISION 1 #define CV_VERSION_REVISION 2
#define CVAUX_STR_EXP(__A) #__A #define CVAUX_STR_EXP(__A) #__A
#define CVAUX_STR(__A) CVAUX_STR_EXP(__A) #define CVAUX_STR(__A) CVAUX_STR_EXP(__A)
+4
View File
@@ -346,6 +346,7 @@ CV_IMPL CvString
cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, int len ) cvMemStorageAllocString( CvMemStorage* storage, const char* ptr, int len )
{ {
CvString str; CvString str;
memset(&str, 0, sizeof(CvString));
str.len = len >= 0 ? len : (int)strlen(ptr); str.len = len >= 0 ? len : (int)strlen(ptr);
str.ptr = (char*)cvMemStorageAlloc( storage, str.len + 1 ); str.ptr = (char*)cvMemStorageAlloc( storage, str.len + 1 );
@@ -1688,6 +1689,9 @@ cvSeqRemoveSlice( CvSeq* seq, CvSlice slice )
slice.end_index = slice.start_index + length; slice.end_index = slice.start_index + length;
if ( slice.start_index == slice.end_index )
return;
if( slice.end_index < total ) if( slice.end_index < total )
{ {
CvSeqReader reader_to, reader_from; CvSeqReader reader_to, reader_from;
+1
View File
@@ -2216,6 +2216,7 @@ void cv::polylines(InputOutputArray _img, InputArrayOfArrays pts,
Mat p = pts.getMat(manyContours ? i : -1); Mat p = pts.getMat(manyContours ? i : -1);
if( p.total() == 0 ) if( p.total() == 0 )
{ {
ptsptr[i] = NULL;
npts[i] = 0; npts[i] = 0;
continue; continue;
} }
+17 -3
View File
@@ -493,6 +493,7 @@ class Core_SeqBaseTest : public Core_DynStructBaseTest
{ {
public: public:
Core_SeqBaseTest(); Core_SeqBaseTest();
virtual ~Core_SeqBaseTest();
void clear(); void clear();
void run( int ); void run( int );
@@ -503,11 +504,14 @@ protected:
int test_seq_ops( int iters ); int test_seq_ops( int iters );
}; };
Core_SeqBaseTest::Core_SeqBaseTest() Core_SeqBaseTest::Core_SeqBaseTest()
{ {
} }
Core_SeqBaseTest::~Core_SeqBaseTest()
{
clear();
}
void Core_SeqBaseTest::clear() void Core_SeqBaseTest::clear()
{ {
@@ -1208,6 +1212,7 @@ class Core_SetTest : public Core_DynStructBaseTest
{ {
public: public:
Core_SetTest(); Core_SetTest();
virtual ~Core_SetTest();
void clear(); void clear();
void run( int ); void run( int );
@@ -1221,6 +1226,10 @@ Core_SetTest::Core_SetTest()
{ {
} }
Core_SetTest::~Core_SetTest()
{
clear();
}
void Core_SetTest::clear() void Core_SetTest::clear()
{ {
@@ -1419,6 +1428,7 @@ class Core_GraphTest : public Core_DynStructBaseTest
{ {
public: public:
Core_GraphTest(); Core_GraphTest();
virtual ~Core_GraphTest();
void clear(); void clear();
void run( int ); void run( int );
@@ -1432,6 +1442,10 @@ Core_GraphTest::Core_GraphTest()
{ {
} }
Core_GraphTest::~Core_GraphTest()
{
clear();
}
void Core_GraphTest::clear() void Core_GraphTest::clear()
{ {
@@ -2044,6 +2058,8 @@ void Core_GraphScanTest::run( int )
CV_TS_SEQ_CHECK_CONDITION( vtx_count == 0 && edge_count == 0, CV_TS_SEQ_CHECK_CONDITION( vtx_count == 0 && edge_count == 0,
"Not every vertex/edge has been visited" ); "Not every vertex/edge has been visited" );
update_progressbar(); update_progressbar();
cvReleaseGraphScanner( &scanner );
} }
// for a random graph the test just checks that every graph vertex and // for a random graph the test just checks that every graph vertex and
@@ -2108,8 +2124,6 @@ void Core_GraphScanTest::run( int )
catch(int) catch(int)
{ {
} }
cvReleaseGraphScanner( &scanner );
} }
@@ -61,7 +61,7 @@ static void writeMatInBin( const Mat& mat, const string& filename )
fwrite( (void*)&mat.rows, sizeof(int), 1, f ); fwrite( (void*)&mat.rows, sizeof(int), 1, f );
fwrite( (void*)&mat.cols, sizeof(int), 1, f ); fwrite( (void*)&mat.cols, sizeof(int), 1, f );
fwrite( (void*)&type, sizeof(int), 1, f ); fwrite( (void*)&type, sizeof(int), 1, f );
int dataSize = (int)(mat.step * mat.rows * mat.channels()); int dataSize = (int)(mat.step * mat.rows);
fwrite( (void*)&dataSize, sizeof(int), 1, f ); fwrite( (void*)&dataSize, sizeof(int), 1, f );
fwrite( (void*)mat.data, 1, dataSize, f ); fwrite( (void*)mat.data, 1, dataSize, f );
fclose(f); fclose(f);
@@ -80,12 +80,15 @@ static Mat readMatFromBin( const string& filename )
size_t elements_read4 = fread( (void*)&dataSize, sizeof(int), 1, f ); size_t elements_read4 = fread( (void*)&dataSize, sizeof(int), 1, f );
CV_Assert(elements_read1 == 1 && elements_read2 == 1 && elements_read3 == 1 && elements_read4 == 1); CV_Assert(elements_read1 == 1 && elements_read2 == 1 && elements_read3 == 1 && elements_read4 == 1);
uchar* data = (uchar*)cvAlloc(dataSize); Mat returnMat(rows, cols, type);
size_t elements_read = fread( (void*)data, 1, dataSize, f ); CV_Assert(returnMat.step * returnMat.rows == (size_t)(dataSize));
size_t elements_read = fread( (void*)returnMat.data, 1, dataSize, f );
CV_Assert(elements_read == (size_t)(dataSize)); CV_Assert(elements_read == (size_t)(dataSize));
fclose(f); fclose(f);
return Mat( rows, cols, type, data ); return returnMat;
} }
return Mat(); return Mat();
} }
@@ -303,7 +303,8 @@ public:
// //
// constructor // constructor
// //
CV_FeatureDetectorMatcherBaseTest(testparam* _tp, double _accuracy_margin, cv::Feature2D* _fe, cv::DescriptorMatcher *_flmatcher, string _flmatchername, int norm_type_for_bfmatcher) : CV_FeatureDetectorMatcherBaseTest(testparam* _tp, double _accuracy_margin, cv::Feature2D* _fe,
cv::DescriptorMatcher *_flmatcher, string _flmatchername, int norm_type_for_bfmatcher) :
tp(_tp), tp(_tp),
target_accuracy_margin_from_bfmatcher(_accuracy_margin), target_accuracy_margin_from_bfmatcher(_accuracy_margin),
fe(_fe), fe(_fe),
@@ -318,6 +319,15 @@ public:
bfmatcher = new cv::BFMatcher(norm_type_for_bfmatcher); bfmatcher = new cv::BFMatcher(norm_type_for_bfmatcher);
} }
virtual ~CV_FeatureDetectorMatcherBaseTest()
{
if (bfmatcher)
{
delete bfmatcher;
bfmatcher = NULL;
}
}
// //
// Main Test method // Main Test method
// //
@@ -65,13 +65,13 @@ protected:
virtual void run( int start_from ); virtual void run( int start_from );
virtual void createModel( const Mat& data ) = 0; virtual void createModel( const Mat& data ) = 0;
virtual int findNeighbors( Mat& points, Mat& neighbors ) = 0; virtual int findNeighbors( Mat& points, Mat& neighbors ) = 0;
virtual int checkGetPoins( const Mat& data ); virtual int checkGetPoints( const Mat& data );
virtual int checkFindBoxed(); virtual int checkFindBoxed();
virtual int checkFind( const Mat& data ); virtual int checkFind( const Mat& data );
virtual void releaseModel() = 0; virtual void releaseModel() = 0;
}; };
int NearestNeighborTest::checkGetPoins( const Mat& ) int NearestNeighborTest::checkGetPoints( const Mat& )
{ {
return cvtest::TS::OK; return cvtest::TS::OK;
} }
@@ -125,11 +125,11 @@ int NearestNeighborTest::checkFind( const Mat& data )
void NearestNeighborTest::run( int /*start_from*/ ) { void NearestNeighborTest::run( int /*start_from*/ ) {
int code = cvtest::TS::OK, tempCode; int code = cvtest::TS::OK, tempCode;
Mat desc( featuresCount, dims, CV_32FC1 ); Mat desc( featuresCount, dims, CV_32FC1 );
randu( desc, Scalar(minValue), Scalar(maxValue) ); ts->get_rng().fill( desc, RNG::UNIFORM, minValue, maxValue );
createModel( desc ); createModel( desc );
tempCode = checkGetPoins( desc ); tempCode = checkGetPoints( desc );
if( tempCode != cvtest::TS::OK ) if( tempCode != cvtest::TS::OK )
{ {
ts->printf( cvtest::TS::LOG, "bad accuracy of GetPoints \n" ); ts->printf( cvtest::TS::LOG, "bad accuracy of GetPoints \n" );
@@ -159,10 +159,10 @@ void NearestNeighborTest::run( int /*start_from*/ ) {
class CV_KDTreeTest_CPP : public NearestNeighborTest class CV_KDTreeTest_CPP : public NearestNeighborTest
{ {
public: public:
CV_KDTreeTest_CPP() {} CV_KDTreeTest_CPP() : NearestNeighborTest(), tr(NULL) {}
protected: protected:
virtual void createModel( const Mat& data ); virtual void createModel( const Mat& data );
virtual int checkGetPoins( const Mat& data ); virtual int checkGetPoints( const Mat& data );
virtual int findNeighbors( Mat& points, Mat& neighbors ); virtual int findNeighbors( Mat& points, Mat& neighbors );
virtual int checkFindBoxed(); virtual int checkFindBoxed();
virtual void releaseModel(); virtual void releaseModel();
@@ -175,7 +175,7 @@ void CV_KDTreeTest_CPP::createModel( const Mat& data )
tr = new KDTree( data, false ); tr = new KDTree( data, false );
} }
int CV_KDTreeTest_CPP::checkGetPoins( const Mat& data ) int CV_KDTreeTest_CPP::checkGetPoints( const Mat& data )
{ {
Mat res1( data.size(), data.type() ), Mat res1( data.size(), data.type() ),
res3( data.size(), data.type() ); res3( data.size(), data.type() );
@@ -244,7 +244,7 @@ void CV_KDTreeTest_CPP::releaseModel()
class CV_FlannTest : public NearestNeighborTest class CV_FlannTest : public NearestNeighborTest
{ {
public: public:
CV_FlannTest() {} CV_FlannTest() : NearestNeighborTest(), index(NULL) { }
protected: protected:
void createIndex( const Mat& data, const IndexParams& params ); void createIndex( const Mat& data, const IndexParams& params );
int knnSearch( Mat& points, Mat& neighbors ); int knnSearch( Mat& points, Mat& neighbors );
@@ -255,6 +255,9 @@ protected:
void CV_FlannTest::createIndex( const Mat& data, const IndexParams& params ) void CV_FlannTest::createIndex( const Mat& data, const IndexParams& params )
{ {
// release previously allocated index
releaseModel();
index = new Index( data, params ); index = new Index( data, params );
} }
@@ -321,7 +324,11 @@ int CV_FlannTest::radiusSearch( Mat& points, Mat& neighbors )
void CV_FlannTest::releaseModel() void CV_FlannTest::releaseModel()
{ {
delete index; if (index)
{
delete index;
index = NULL;
}
} }
//--------------------------------------- //---------------------------------------
@@ -384,6 +384,8 @@ public:
} }
root_ = pool_.allocate<KMeansNode>(); root_ = pool_.allocate<KMeansNode>();
std::memset(root_, 0, sizeof(KMeansNode));
computeNodeStatistics(root_, indices_, (int)size_); computeNodeStatistics(root_, indices_, (int)size_);
computeClustering(root_, indices_, (int)size_, branching_,0); computeClustering(root_, indices_, (int)size_, branching_,0);
} }
@@ -823,11 +825,11 @@ private:
variance -= distance_(centers[c], ZeroIterator<ElementType>(), veclen_); variance -= distance_(centers[c], ZeroIterator<ElementType>(), veclen_);
node->childs[c] = pool_.allocate<KMeansNode>(); node->childs[c] = pool_.allocate<KMeansNode>();
std::memset(node->childs[c], 0, sizeof(KMeansNode));
node->childs[c]->radius = radiuses[c]; node->childs[c]->radius = radiuses[c];
node->childs[c]->pivot = centers[c]; node->childs[c]->pivot = centers[c];
node->childs[c]->variance = variance; node->childs[c]->variance = variance;
node->childs[c]->mean_radius = mean_radius; node->childs[c]->mean_radius = mean_radius;
node->childs[c]->indices = NULL;
computeClustering(node->childs[c],indices+start, end-start, branching, level+1); computeClustering(node->childs[c],indices+start, end-start, branching, level+1);
start=end; start=end;
} }
+5 -3
View File
@@ -318,12 +318,14 @@ buildIndex_(void*& index, const Mat& wholedata, const Mat& data, const IndexPara
::cvflann::Matrix<ElementType> dataset((ElementType*)data.data, data.rows, data.cols); ::cvflann::Matrix<ElementType> dataset((ElementType*)data.data, data.rows, data.cols);
IndexType* _index = NULL; // currently, additional index support is the lsh algorithm only.
if( !index || getParam<flann_algorithm_t>(params, "algorithm", FLANN_INDEX_LINEAR) != FLANN_INDEX_LSH) // currently, additional index support is the lsh algorithm only. if( !index || getParam<flann_algorithm_t>(params, "algorithm", FLANN_INDEX_LINEAR) != FLANN_INDEX_LSH)
{ {
_index = new IndexType(dataset, get_params(params), dist); Ptr<IndexType> _index = makePtr<IndexType>(dataset, get_params(params), dist);
_index->buildIndex(); _index->buildIndex();
index = _index; index = _index;
// HACK to prevent object destruction
_index.obj = NULL;
} }
else // build additional lsh index else // build additional lsh index
{ {
+9 -9
View File
@@ -255,7 +255,7 @@ namespace cv { namespace gpu { namespace device
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
template <typename T> template <typename T>
__global__ void data_step_down(int dst_cols, int dst_rows, int src_rows, const PtrStep<T> src, PtrStep<T> dst) __global__ void data_step_down(int dst_cols, int dst_rows, int src_cols, int src_rows, const PtrStep<T> src, PtrStep<T> dst)
{ {
const int x = blockIdx.x * blockDim.x + threadIdx.x; const int x = blockIdx.x * blockDim.x + threadIdx.x;
const int y = blockIdx.y * blockDim.y + threadIdx.y; const int y = blockIdx.y * blockDim.y + threadIdx.y;
@@ -264,10 +264,10 @@ namespace cv { namespace gpu { namespace device
{ {
for (int d = 0; d < cndisp; ++d) for (int d = 0; d < cndisp; ++d)
{ {
float dst_reg = src.ptr(d * src_rows + (2*y+0))[(2*x+0)]; float dst_reg = src.ptr(d * src_rows + ::min(2*y+0, src_rows-1))[::min(2*x+0, src_cols-1)];
dst_reg += src.ptr(d * src_rows + (2*y+1))[(2*x+0)]; dst_reg += src.ptr(d * src_rows + ::min(2*y+1, src_rows-1))[::min(2*x+0, src_cols-1)];
dst_reg += src.ptr(d * src_rows + (2*y+0))[(2*x+1)]; dst_reg += src.ptr(d * src_rows + ::min(2*y+0, src_rows-1))[::min(2*x+1, src_cols-1)];
dst_reg += src.ptr(d * src_rows + (2*y+1))[(2*x+1)]; dst_reg += src.ptr(d * src_rows + ::min(2*y+1, src_rows-1))[::min(2*x+1, src_cols-1)];
dst.ptr(d * dst_rows + y)[x] = saturate_cast<T>(dst_reg); dst.ptr(d * dst_rows + y)[x] = saturate_cast<T>(dst_reg);
} }
@@ -275,7 +275,7 @@ namespace cv { namespace gpu { namespace device
} }
template<typename T> template<typename T>
void data_step_down_gpu(int dst_cols, int dst_rows, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream) void data_step_down_gpu(int dst_cols, int dst_rows, int src_cols, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream)
{ {
dim3 threads(32, 8, 1); dim3 threads(32, 8, 1);
dim3 grid(1, 1, 1); dim3 grid(1, 1, 1);
@@ -283,15 +283,15 @@ namespace cv { namespace gpu { namespace device
grid.x = divUp(dst_cols, threads.x); grid.x = divUp(dst_cols, threads.x);
grid.y = divUp(dst_rows, threads.y); grid.y = divUp(dst_rows, threads.y);
data_step_down<T><<<grid, threads, 0, stream>>>(dst_cols, dst_rows, src_rows, (PtrStepSz<T>)src, (PtrStepSz<T>)dst); data_step_down<T><<<grid, threads, 0, stream>>>(dst_cols, dst_rows, src_cols, src_rows, (PtrStepSz<T>)src, (PtrStepSz<T>)dst);
cudaSafeCall( cudaGetLastError() ); cudaSafeCall( cudaGetLastError() );
if (stream == 0) if (stream == 0)
cudaSafeCall( cudaDeviceSynchronize() ); cudaSafeCall( cudaDeviceSynchronize() );
} }
template void data_step_down_gpu<short>(int dst_cols, int dst_rows, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream); template void data_step_down_gpu<short>(int dst_cols, int dst_rows, int src_cols, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream);
template void data_step_down_gpu<float>(int dst_cols, int dst_rows, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream); template void data_step_down_gpu<float>(int dst_cols, int dst_rows, int src_cols, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream);
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
/////////////////// level up messages //////////////////////// /////////////////// level up messages ////////////////////////
+4 -4
View File
@@ -2804,7 +2804,7 @@ void cv::gpu::bitwise_not(const GpuMat& src, GpuMat& dst, const GpuMat& mask, St
} }
else else
{ {
const int elem_size = src.elemSize1(); const int elem_size = static_cast<int>(src.elemSize1());
const int num_channels = src.channels(); const int num_channels = src.channels();
const int bcols = src.cols * num_channels; const int bcols = src.cols * num_channels;
@@ -2895,7 +2895,7 @@ void cv::gpu::bitwise_and(const GpuMat& src1, const GpuMat& src2, GpuMat& dst, c
} }
else else
{ {
const int elem_size = src1.elemSize1(); const int elem_size = static_cast<int>(src1.elemSize1());
const int num_channels = src1.channels(); const int num_channels = src1.channels();
const int bcols = src1.cols * num_channels; const int bcols = src1.cols * num_channels;
@@ -2979,7 +2979,7 @@ void cv::gpu::bitwise_or(const GpuMat& src1, const GpuMat& src2, GpuMat& dst, co
} }
else else
{ {
const int elem_size = src1.elemSize1(); const int elem_size = static_cast<int>(src1.elemSize1());
const int num_channels = src1.channels(); const int num_channels = src1.channels();
const int bcols = src1.cols * num_channels; const int bcols = src1.cols * num_channels;
@@ -3063,7 +3063,7 @@ void cv::gpu::bitwise_xor(const GpuMat& src1, const GpuMat& src2, GpuMat& dst, c
} }
else else
{ {
const int elem_size = src1.elemSize1(); const int elem_size = static_cast<int>(src1.elemSize1());
const int num_channels = src1.channels(); const int num_channels = src1.channels();
const int bcols = src1.cols * num_channels; const int bcols = src1.cols * num_channels;
+13 -13
View File
@@ -67,7 +67,7 @@ namespace cv { namespace gpu { namespace device
template<typename T, typename D> template<typename T, typename D>
void comp_data_gpu(const PtrStepSzb& left, const PtrStepSzb& right, const PtrStepSzb& data, cudaStream_t stream); void comp_data_gpu(const PtrStepSzb& left, const PtrStepSzb& right, const PtrStepSzb& data, cudaStream_t stream);
template<typename T> template<typename T>
void data_step_down_gpu(int dst_cols, int dst_rows, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream); void data_step_down_gpu(int dst_cols, int dst_rows, int src_cols, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream);
template <typename T> template <typename T>
void level_up_messages_gpu(int dst_idx, int dst_cols, int dst_rows, int src_rows, PtrStepSzb* mus, PtrStepSzb* mds, PtrStepSzb* mls, PtrStepSzb* mrs, cudaStream_t stream); void level_up_messages_gpu(int dst_idx, int dst_cols, int dst_rows, int src_rows, PtrStepSzb* mus, PtrStepSzb* mds, PtrStepSzb* mls, PtrStepSzb* mrs, cudaStream_t stream);
template <typename T> template <typename T>
@@ -158,7 +158,7 @@ namespace
init(stream); init(stream);
datas[0].create(rows * rthis.ndisp, cols, rthis.msg_type); createContinuous(rows * rthis.ndisp, cols, rthis.msg_type, datas[0]);
comp_data_callers[rthis.msg_type == CV_32F][left.channels()](left, right, datas[0], StreamAccessor::getStream(stream)); comp_data_callers[rthis.msg_type == CV_32F][left.channels()](left, right, datas[0], StreamAccessor::getStream(stream));
@@ -187,10 +187,10 @@ namespace
private: private:
void init(Stream& stream) void init(Stream& stream)
{ {
u.create(rows * rthis.ndisp, cols, rthis.msg_type); createContinuous(rows * rthis.ndisp, cols, rthis.msg_type, u);
d.create(rows * rthis.ndisp, cols, rthis.msg_type); createContinuous(rows * rthis.ndisp, cols, rthis.msg_type, d);
l.create(rows * rthis.ndisp, cols, rthis.msg_type); createContinuous(rows * rthis.ndisp, cols, rthis.msg_type, l);
r.create(rows * rthis.ndisp, cols, rthis.msg_type); createContinuous(rows * rthis.ndisp, cols, rthis.msg_type, r);
if (rthis.levels & 1) if (rthis.levels & 1)
{ {
@@ -216,10 +216,10 @@ namespace
int less_rows = (rows + 1) / 2; int less_rows = (rows + 1) / 2;
int less_cols = (cols + 1) / 2; int less_cols = (cols + 1) / 2;
u2.create(less_rows * rthis.ndisp, less_cols, rthis.msg_type); createContinuous(less_rows * rthis.ndisp, less_cols, rthis.msg_type, u2);
d2.create(less_rows * rthis.ndisp, less_cols, rthis.msg_type); createContinuous(less_rows * rthis.ndisp, less_cols, rthis.msg_type, d2);
l2.create(less_rows * rthis.ndisp, less_cols, rthis.msg_type); createContinuous(less_rows * rthis.ndisp, less_cols, rthis.msg_type, l2);
r2.create(less_rows * rthis.ndisp, less_cols, rthis.msg_type); createContinuous(less_rows * rthis.ndisp, less_cols, rthis.msg_type, r2);
if ((rthis.levels & 1) == 0) if ((rthis.levels & 1) == 0)
{ {
@@ -253,7 +253,7 @@ namespace
void calcBP(GpuMat& disp, Stream& stream) void calcBP(GpuMat& disp, Stream& stream)
{ {
typedef void (*data_step_down_t)(int dst_cols, int dst_rows, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream); typedef void (*data_step_down_t)(int dst_cols, int dst_rows, int src_cols, int src_rows, const PtrStepSzb& src, const PtrStepSzb& dst, cudaStream_t stream);
static const data_step_down_t data_step_down_callers[2] = static const data_step_down_t data_step_down_callers[2] =
{ {
data_step_down_gpu<short>, data_step_down_gpu<float> data_step_down_gpu<short>, data_step_down_gpu<float>
@@ -286,9 +286,9 @@ namespace
cols_all[i] = (cols_all[i-1] + 1) / 2; cols_all[i] = (cols_all[i-1] + 1) / 2;
rows_all[i] = (rows_all[i-1] + 1) / 2; rows_all[i] = (rows_all[i-1] + 1) / 2;
datas[i].create(rows_all[i] * rthis.ndisp, cols_all[i], rthis.msg_type); createContinuous(rows_all[i] * rthis.ndisp, cols_all[i], rthis.msg_type, datas[i]);
data_step_down_callers[funcIdx](cols_all[i], rows_all[i], rows_all[i-1], datas[i-1], datas[i], cudaStream); data_step_down_callers[funcIdx](cols_all[i], rows_all[i], cols_all[i-1], rows_all[i-1], datas[i-1], datas[i], cudaStream);
} }
PtrStepSzb mus[] = {u, u2}; PtrStepSzb mus[] = {u, u2};
+3 -1
View File
@@ -114,7 +114,9 @@ GPU_TEST_P(StereoBeliefPropagation, Regression)
cv::Mat h_disp(disp); cv::Mat h_disp(disp);
h_disp.convertTo(h_disp, disp_gold.depth()); h_disp.convertTo(h_disp, disp_gold.depth());
EXPECT_MAT_NEAR(disp_gold, h_disp, 0.0); cv::Rect roi(0, 0, disp_gold.cols - 20, disp_gold.rows - 20);
EXPECT_MAT_NEAR(disp_gold(roi), h_disp(roi), 0.0);
} }
INSTANTIATE_TEST_CASE_P(GPU_Calib3D, StereoBeliefPropagation, ALL_DEVICES); INSTANTIATE_TEST_CASE_P(GPU_Calib3D, StereoBeliefPropagation, ALL_DEVICES);
@@ -1,7 +1,3 @@
/*! \file imgproc.hpp
\brief The Image Processing
*/
/*M/////////////////////////////////////////////////////////////////////////////////////// /*M///////////////////////////////////////////////////////////////////////////////////////
// //
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
@@ -1,7 +1,3 @@
/*! \file imgproc.hpp
\brief The Image Processing
*/
/*M/////////////////////////////////////////////////////////////////////////////////////// /*M///////////////////////////////////////////////////////////////////////////////////////
// //
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+19 -1
View File
@@ -548,7 +548,7 @@ void referenceRGB2YUV(const Mat& rgb, Mat& yuv, RGBreader* rgbReader, YUVwriter*
struct ConversionYUV struct ConversionYUV
{ {
ConversionYUV( const int code ) explicit ConversionYUV( const int code )
{ {
yuvReader_ = YUVreader :: getReader(code); yuvReader_ = YUVreader :: getReader(code);
yuvWriter_ = YUVwriter :: getWriter(code); yuvWriter_ = YUVwriter :: getWriter(code);
@@ -557,6 +557,24 @@ struct ConversionYUV
grayWriter_ = GRAYwriter:: getWriter(code); grayWriter_ = GRAYwriter:: getWriter(code);
} }
~ConversionYUV()
{
if (yuvReader_)
delete yuvReader_;
if (yuvWriter_)
delete yuvWriter_;
if (rgbReader_)
delete rgbReader_;
if (rgbWriter_)
delete rgbWriter_;
if (grayWriter_)
delete grayWriter_;
}
int getDcn() int getDcn()
{ {
return (rgbWriter_ != 0) ? rgbWriter_->channels() : ((grayWriter_ != 0) ? grayWriter_->channels() : yuvWriter_->channels()); return (rgbWriter_ != 0) ? rgbWriter_->channels() : ((grayWriter_ != 0) ? grayWriter_->channels() : yuvWriter_->channels());
+2
View File
@@ -501,6 +501,8 @@ _exit_:
comp[6] = s1; comp[6] = s1;
comp[7] = s2; comp[7] = s2;
comp[8] = 0; comp[8] = 0;
cvReleaseMemStorage(&st);
} }
+5
View File
@@ -1420,12 +1420,17 @@ TEST(Imgproc_cvWarpAffine, regression)
IplImage* src = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 1); IplImage* src = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 1);
IplImage* dst = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 1); IplImage* dst = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 1);
cvZero(src);
float m[6]; float m[6];
CvMat M = cvMat( 2, 3, CV_32F, m ); CvMat M = cvMat( 2, 3, CV_32F, m );
int w = src->width; int w = src->width;
int h = src->height; int h = src->height;
cv2DRotationMatrix(cvPoint2D32f(w*0.5f, h*0.5f), 45.0, 1.0, &M); cv2DRotationMatrix(cvPoint2D32f(w*0.5f, h*0.5f), 45.0, 1.0, &M);
cvWarpAffine(src, dst, &M); cvWarpAffine(src, dst, &M);
cvReleaseImage(&src);
cvReleaseImage(&dst);
} }
TEST(Imgproc_fitLine_vector_3d, regression) TEST(Imgproc_fitLine_vector_3d, regression)
+8 -26
View File
@@ -644,8 +644,7 @@ private:
}; };
CV_Remap_Test::CV_Remap_Test() : CV_Remap_Test::CV_Remap_Test() :
CV_ImageWarpBaseTest(), mapx(), mapy(), CV_ImageWarpBaseTest(), borderType(-1)
borderType(-1), borderValue()
{ {
funcs[0] = &CV_Remap_Test::remap_nearest; funcs[0] = &CV_Remap_Test::remap_nearest;
funcs[1] = &CV_Remap_Test::remap_generic; funcs[1] = &CV_Remap_Test::remap_generic;
@@ -666,7 +665,7 @@ void CV_Remap_Test::generate_test_data()
// generating the mapx, mapy matrices // generating the mapx, mapy matrices
static const int mapx_types[] = { CV_16SC2, CV_32FC1, CV_32FC2 }; static const int mapx_types[] = { CV_16SC2, CV_32FC1, CV_32FC2 };
mapx.create(dst.size(), mapx_types[rng.uniform(0, sizeof(mapx_types) / sizeof(int))]); mapx.create(dst.size(), mapx_types[rng.uniform(0, sizeof(mapx_types) / sizeof(int))]);
mapy = Mat(); mapy.release();
const int n = std::min(std::min(src.cols, src.rows) / 10 + 1, 2); const int n = std::min(std::min(src.cols, src.rows) / 10 + 1, 2);
float _n = 0; //static_cast<float>(-n); float _n = 0; //static_cast<float>(-n);
@@ -693,7 +692,7 @@ void CV_Remap_Test::generate_test_data()
{ {
MatIterator_<ushort> begin_y = mapy.begin<ushort>(), end_y = mapy.end<ushort>(); MatIterator_<ushort> begin_y = mapy.begin<ushort>(), end_y = mapy.end<ushort>();
for ( ; begin_y != end_y; ++begin_y) for ( ; begin_y != end_y; ++begin_y)
begin_y[0] = static_cast<short>(rng.uniform(0, 1024)); *begin_y = static_cast<ushort>(rng.uniform(0, 1024));
} }
break; break;
@@ -701,7 +700,7 @@ void CV_Remap_Test::generate_test_data()
{ {
MatIterator_<short> begin_y = mapy.begin<short>(), end_y = mapy.end<short>(); MatIterator_<short> begin_y = mapy.begin<short>(), end_y = mapy.end<short>();
for ( ; begin_y != end_y; ++begin_y) for ( ; begin_y != end_y; ++begin_y)
begin_y[0] = static_cast<short>(rng.uniform(0, 1024)); *begin_y = static_cast<short>(rng.uniform(0, 1024));
} }
break; break;
} }
@@ -718,8 +717,8 @@ void CV_Remap_Test::generate_test_data()
MatIterator_<float> begin_y = mapy.begin<float>(); MatIterator_<float> begin_y = mapy.begin<float>();
for ( ; begin_x != end_x; ++begin_x, ++begin_y) for ( ; begin_x != end_x; ++begin_x, ++begin_y)
{ {
begin_x[0] = rng.uniform(_n, fscols); *begin_x = rng.uniform(_n, fscols);
begin_y[0] = rng.uniform(_n, fsrows); *begin_y = rng.uniform(_n, fsrows);
} }
} }
break; break;
@@ -731,8 +730,8 @@ void CV_Remap_Test::generate_test_data()
fsrows = static_cast<float>(std::max(src.rows - 1 + n, 0)); fsrows = static_cast<float>(std::max(src.rows - 1 + n, 0));
for ( ; begin_x != end_x; ++begin_x) for ( ; begin_x != end_x; ++begin_x)
{ {
begin_x[0] = rng.uniform(_n, fscols); (*begin_x)[0] = rng.uniform(_n, fscols);
begin_x[1] = rng.uniform(_n, fsrows); (*begin_x)[1] = rng.uniform(_n, fsrows);
} }
} }
break; break;
@@ -777,23 +776,6 @@ void CV_Remap_Test::prepare_test_data_for_reference_func()
{ {
CV_ImageWarpBaseTest::prepare_test_data_for_reference_func(); CV_ImageWarpBaseTest::prepare_test_data_for_reference_func();
convert_maps(); convert_maps();
/*
const int ksize = 3;
Mat kernel = getStructuringElement(CV_MOP_ERODE, Size(ksize, ksize));
Mat mask(src.size(), CV_8UC1, Scalar::all(255)), dst_mask;
cv::erode(src, erode_src, kernel);
cv::erode(mask, dst_mask, kernel, Point(-1, -1), 1, BORDER_CONSTANT, Scalar::all(0));
bitwise_not(dst_mask, mask);
src.copyTo(erode_src, mask);
dst_mask.release();
mask = Scalar::all(0);
kernel = getStructuringElement(CV_MOP_DILATE, kernel.size());
cv::dilate(src, dilate_src, kernel);
cv::dilate(mask, dst_mask, kernel, Point(-1, -1), 1, BORDER_CONSTANT, Scalar::all(255));
src.copyTo(dilate_src, dst_mask);
dst_mask.release();
*/
} }
void CV_Remap_Test::run_reference_func() void CV_Remap_Test::run_reference_func()
+4
View File
@@ -1535,6 +1535,10 @@ void CvANN_MLP::read( CvFileStorage* fs, CvFileNode* node )
_layer_sizes = (CvMat*)cvReadByName( fs, node, "layer_sizes" ); _layer_sizes = (CvMat*)cvReadByName( fs, node, "layer_sizes" );
CV_CALL( create( _layer_sizes, SIGMOID_SYM, 0, 0 )); CV_CALL( create( _layer_sizes, SIGMOID_SYM, 0, 0 ));
cvReleaseMat( &_layer_sizes );
_layer_sizes = NULL;
l_count = layer_sizes->cols; l_count = layer_sizes->cols;
CV_CALL( read_params( fs, node )); CV_CALL( read_params( fs, node ));
+3
View File
@@ -537,6 +537,9 @@ void CvERTreeTrainData::set_data( const CvMat* _train_data, int _tflag,
if( data ) if( data )
delete data; delete data;
if ( pair16u32s_ptr )
cvFree( &pair16u32s_ptr );
if (_fdst) if (_fdst)
cvFree( &_fdst ); cvFree( &_fdst );
if (_idst) if (_idst)
+9 -1
View File
@@ -259,7 +259,7 @@ CvGBTrees::train( const CvMat* _train_data, int _tflag,
for (int i=1; i<n; ++i) for (int i=1; i<n; ++i)
{ {
int k = 0; int k = 0;
while ((int(orig_response->data.fl[i]) - class_labels->data.i[k]) && (k<j)) while ((k<j) && (int(orig_response->data.fl[i]) - class_labels->data.i[k]))
k++; k++;
if (k == j) if (k == j)
{ {
@@ -1292,13 +1292,18 @@ CvGBTrees::calc_error( CvMLData* _data, int type, std::vector<float> *resp )
return -FLT_MAX; return -FLT_MAX;
float* pred_resp = 0; float* pred_resp = 0;
bool needsFreeing = false;
if (resp) if (resp)
{ {
resp->resize(n); resp->resize(n);
pred_resp = &((*resp)[0]); pred_resp = &((*resp)[0]);
} }
else else
{
pred_resp = new float[n]; pred_resp = new float[n];
needsFreeing = true;
}
Sample_predictor predictor = Sample_predictor(this, pred_resp, _data->get_values(), Sample_predictor predictor = Sample_predictor(this, pred_resp, _data->get_values(),
_data->get_missing(), _sample_idx); _data->get_missing(), _sample_idx);
@@ -1331,6 +1336,9 @@ CvGBTrees::calc_error( CvMLData* _data, int type, std::vector<float> *resp )
err = err / (float)n; err = err / (float)n;
} }
if (needsFreeing)
delete[]pred_resp;
return err; return err;
} }
+5
View File
@@ -2315,7 +2315,12 @@ void CvSVM::write( CvFileStorage* fs, const char* name ) const
params.svm_type == CvSVM::ONE_CLASS ? 1 : 0; params.svm_type == CvSVM::ONE_CLASS ? 1 : 0;
const CvSVMDecisionFunc* df = decision_func; const CvSVMDecisionFunc* df = decision_func;
if( !isSvmModelApplicable(sv_total, var_all, var_count, class_count) ) if( !isSvmModelApplicable(sv_total, var_all, var_count, class_count) )
{
cvReleaseFileStorage( &fs );
fs = NULL;
CV_ERROR( CV_StsParseError, "SVM model data is invalid, check sv_count, var_* and class_count tags" ); CV_ERROR( CV_StsParseError, "SVM model data is invalid, check sv_count, var_* and class_count tags" );
}
cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_SVM ); cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_SVM );
+2
View File
@@ -323,6 +323,7 @@ BadArgTest::BadArgTest()
progress = -1; progress = -1;
test_case_idx = -1; test_case_idx = -1;
freq = cv::getTickFrequency(); freq = cv::getTickFrequency();
t = -1;
// oldErrorCbk = 0; // oldErrorCbk = 0;
// oldErrorCbkData = 0; // oldErrorCbkData = 0;
} }
@@ -338,6 +339,7 @@ int BadArgTest::run_test_case( int expected_code, const string& _descr )
{ {
test_case_idx = 0; test_case_idx = 0;
progress = 0; progress = 0;
t = 0;
dt = 0; dt = 0;
} }
else else