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

Merge pull request #19392 from amirtu:OCV-165_finalize_goodFeaturesToTrack_returns_also_corner_value_PR

* goodFeaturesToTrack returns also corner value

(cherry picked from commit 4a8f06755c)

* Added response to GFTT Detector keypoints

(cherry picked from commit b88fb40c6e)

* Moved corner values to another optional variable to preserve backward compatibility

(cherry picked from commit 6137383d32)

* Removed corners valus from perf tests and better unit tests for corners values

(cherry picked from commit f3d0ef21a7)

* Fixed detector gftt call

(cherry picked from commit be2975553b)

* Restored test_cornerEigenValsVecs

(cherry picked from commit ea3e11811f)

* scaling fixed;
mineigen calculation rolled back;
gftt function overload added (with quality parameter);
perf tests were added for the new api function;
external bindings were added for the function (with different alias);
fixed issues with composition of the output array of the new function (e.g. as requested in comments) ;
added sanity checks in the perf tests;
removed C API changes.

* minor change to GFTTDetector::detect

* substitute ts->printf with EXPECT_LE

* avoid re-allocations

Co-authored-by: Anas <anas.el.amraoui@live.com>
Co-authored-by: amir.tulegenov <amir.tulegenov@xperience.ai>
This commit is contained in:
Amir Tulegenov
2021-02-16 01:55:57 +06:00
committed by GitHub
parent ad66b070a7
commit 47426a8ae5
7 changed files with 183 additions and 28 deletions
+7 -6
View File
@@ -87,6 +87,7 @@ public:
}
std::vector<Point2f> corners;
std::vector<float> cornersQuality;
if (_image.isUMat())
{
@@ -97,7 +98,7 @@ public:
ugrayImage = _image.getUMat();
goodFeaturesToTrack( ugrayImage, corners, nfeatures, qualityLevel, minDistance, _mask,
blockSize, gradSize, useHarrisDetector, k );
cornersQuality, blockSize, gradSize, useHarrisDetector, k );
}
else
{
@@ -106,14 +107,14 @@ public:
cvtColor( image, grayImage, COLOR_BGR2GRAY );
goodFeaturesToTrack( grayImage, corners, nfeatures, qualityLevel, minDistance, _mask,
blockSize, gradSize, useHarrisDetector, k );
cornersQuality, blockSize, gradSize, useHarrisDetector, k );
}
CV_Assert(corners.size() == cornersQuality.size());
keypoints.resize(corners.size());
std::vector<Point2f>::const_iterator corner_it = corners.begin();
std::vector<KeyPoint>::iterator keypoint_it = keypoints.begin();
for( ; corner_it != corners.end() && keypoint_it != keypoints.end(); ++corner_it, ++keypoint_it )
*keypoint_it = KeyPoint( *corner_it, (float)blockSize );
for (size_t i = 0; i < corners.size(); i++)
keypoints[i] = KeyPoint(corners[i], (float)blockSize, -1, cornersQuality[i]);
}