mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
- fix a possible crash when only asking for features and not descriptors
This commit is contained in:
parent
355ad2993a
commit
909e484e74
@ -523,8 +523,6 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv::
|
|||||||
if ((!do_keypoints) && (!do_descriptors))
|
if ((!do_keypoints) && (!do_descriptors))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (do_keypoints)
|
|
||||||
keypoints_in_out.clear();
|
|
||||||
if (do_descriptors)
|
if (do_descriptors)
|
||||||
descriptors.release();
|
descriptors.release();
|
||||||
|
|
||||||
@ -560,6 +558,7 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv::
|
|||||||
all_keypoints[keypoint->octave].push_back(*keypoint);
|
all_keypoints[keypoint->octave].push_back(*keypoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keypoints_in_out.clear();
|
||||||
for (unsigned int level = 0; level < params_.n_levels_; ++level)
|
for (unsigned int level = 0; level < params_.n_levels_; ++level)
|
||||||
{
|
{
|
||||||
// Compute the resized image
|
// Compute the resized image
|
||||||
@ -583,29 +582,22 @@ void ORB::operator()(const cv::Mat &image, const cv::Mat &mask, std::vector<cv::
|
|||||||
computeDescriptors(working_mat, integral_image, level, keypoints, desc);
|
computeDescriptors(working_mat, integral_image, level, keypoints, desc);
|
||||||
|
|
||||||
// Copy to the output data
|
// Copy to the output data
|
||||||
if (!desc.empty())
|
if (level != params_.first_level_)
|
||||||
{
|
{
|
||||||
if (do_keypoints)
|
float scale = std::pow(params_.scale_factor_, float(level - params_.first_level_));
|
||||||
{
|
for (std::vector<cv::KeyPoint>::iterator keypoint = keypoints.begin(), keypoint_end = keypoints.end(); keypoint
|
||||||
// Rescale the coordinates
|
!= keypoint_end; ++keypoint)
|
||||||
if (level != params_.first_level_)
|
keypoint->pt *= scale;
|
||||||
{
|
}
|
||||||
float scale = std::pow(params_.scale_factor_, float(level - params_.first_level_));
|
// And add the keypoints to the output
|
||||||
for (std::vector<cv::KeyPoint>::iterator keypoint = keypoints.begin(), keypoint_end = keypoints.end(); keypoint
|
keypoints_in_out.insert(keypoints_in_out.end(), keypoints.begin(), keypoints.end());
|
||||||
!= keypoint_end; ++keypoint)
|
|
||||||
keypoint->pt *= scale;
|
|
||||||
}
|
|
||||||
// And add the keypoints to the output
|
|
||||||
keypoints_in_out.insert(keypoints_in_out.end(), keypoints.begin(), keypoints.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (do_descriptors)
|
if (do_descriptors)
|
||||||
{
|
{
|
||||||
if (descriptors.empty())
|
if (descriptors.empty())
|
||||||
desc.copyTo(descriptors);
|
desc.copyTo(descriptors);
|
||||||
else
|
else
|
||||||
descriptors.push_back(desc);
|
descriptors.push_back(desc);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user