From 20e17e51dbce52d8bab970cc4163e568bc51142f Mon Sep 17 00:00:00 2001 From: kokerf Date: Sat, 26 Oct 2019 20:56:44 +0800 Subject: [PATCH 1/2] fix memset error in CombinedDescriptor --- modules/stereo/include/opencv2/stereo/descriptor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/stereo/include/opencv2/stereo/descriptor.hpp b/modules/stereo/include/opencv2/stereo/descriptor.hpp index 397fd315a..544336ada 100644 --- a/modules/stereo/include/opencv2/stereo/descriptor.hpp +++ b/modules/stereo/include/opencv2/stereo/descriptor.hpp @@ -222,7 +222,7 @@ namespace cv for (int j = n2 + 2; j <= width - n2 - 2; j++) { int c[nr_img]; - memset(c,0,nr_img); + memset(c, 0, sizeof(c[0]) * nr_img); for(int step = step_start; step <= step_end; step += step_inc) { for (int ii = - n2; ii <= + n2_stop; ii += step) From e45887e1c097db6e5f75dc70d7723203bcafa5f1 Mon Sep 17 00:00:00 2001 From: ab-dragon Date: Fri, 1 Nov 2019 18:28:18 +0000 Subject: [PATCH 2/2] Merge pull request #2301 from ab-dragon:conditionally_compute_dog_pyramid Build DoG Pyramid if useProvideKeypoints is false The buildDoGPyramid operation need not be performed unconditionally. In cases where it is not needed, both memory and speed performance can be improved --- modules/xfeatures2d/src/sift.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/xfeatures2d/src/sift.cpp b/modules/xfeatures2d/src/sift.cpp index 080e45da9..ec1abf1f5 100644 --- a/modules/xfeatures2d/src/sift.cpp +++ b/modules/xfeatures2d/src/sift.cpp @@ -1147,19 +1147,20 @@ void SIFT_Impl::detectAndCompute(InputArray _image, InputArray _mask, } Mat base = createInitialImage(image, firstOctave < 0, (float)sigma); - std::vector gpyr, dogpyr; + std::vector gpyr; int nOctaves = actualNOctaves > 0 ? actualNOctaves : cvRound(std::log( (double)std::min( base.cols, base.rows ) ) / std::log(2.) - 2) - firstOctave; //double t, tf = getTickFrequency(); //t = (double)getTickCount(); buildGaussianPyramid(base, gpyr, nOctaves); - buildDoGPyramid(gpyr, dogpyr); //t = (double)getTickCount() - t; //printf("pyramid construction time: %g\n", t*1000./tf); if( !useProvidedKeypoints ) { + std::vector dogpyr; + buildDoGPyramid(gpyr, dogpyr); //t = (double)getTickCount(); findScaleSpaceExtrema(gpyr, dogpyr, keypoints); KeyPointsFilter::removeDuplicatedSorted( keypoints );