diff --git a/modules/features2d/src/orb.cpp b/modules/features2d/src/orb.cpp index 19491f1dc..8aeea829a 100644 --- a/modules/features2d/src/orb.cpp +++ b/modules/features2d/src/orb.cpp @@ -633,7 +633,7 @@ static void computeKeyPoints(const vector& imagePyramid, // pre-compute the end of a row in a circular patch int halfPatchSize = patchSize / 2; - vector umax(halfPatchSize + 1); + vector umax(halfPatchSize + 2); int v, v0, vmax = cvFloor(halfPatchSize * sqrt(2.f) / 2 + 1); int vmin = cvCeil(halfPatchSize * sqrt(2.f) / 2); @@ -643,7 +643,7 @@ static void computeKeyPoints(const vector& imagePyramid, // Make sure we are symmetric for (v = halfPatchSize, v0 = 0; v >= vmin; --v) { - while (umax[v0] == umax[v0 + 1]) + while (umax[v0] == umax[v0 + 1]) ++v0; umax[v] = v0; ++v0; @@ -723,6 +723,8 @@ static void computeDescriptors(const Mat& image, vector& keypoints, Ma void ORB::operator()( InputArray _image, InputArray _mask, vector& _keypoints, OutputArray _descriptors, bool useProvidedKeypoints) const { + CV_Assert(patchSize >= 2); + bool do_keypoints = !useProvidedKeypoints; bool do_descriptors = _descriptors.needed();