diff --git a/modules/calib3d/src/calibinit.cpp b/modules/calib3d/src/calibinit.cpp index 04392a2ba4..362b62f98c 100644 --- a/modules/calib3d/src/calibinit.cpp +++ b/modules/calib3d/src/calibinit.cpp @@ -1939,8 +1939,8 @@ void cv::drawChessboardCorners( InputOutputArray _image, Size patternSize, bool cv::findCirclesGrid( InputArray _image, Size patternSize, OutputArray _centers, int flags, const Ptr &blobDetector ) { - bool isAsymmetricGrid = (flags & CALIB_CB_ASYMMETRIC_GRID) ? true : false; - bool isSymmetricGrid = (flags & CALIB_CB_SYMMETRIC_GRID ) ? true : false; + bool isAsymmetricGrid = (flags & CALIB_CB_ASYMMETRIC_GRID) ? true : false; + bool isSymmetricGrid = (flags & CALIB_CB_SYMMETRIC_GRID ) ? true : false; CV_Assert(isAsymmetricGrid ^ isSymmetricGrid); Mat image = _image.getMat(); diff --git a/modules/calib3d/src/circlesgrid.cpp b/modules/calib3d/src/circlesgrid.cpp index 3982bf1a5d..36fecba554 100644 --- a/modules/calib3d/src/circlesgrid.cpp +++ b/modules/calib3d/src/circlesgrid.cpp @@ -748,7 +748,13 @@ Mat CirclesGridFinder::rectifyGrid(Size detectedGridSize, const vector& const Point2f offset(150, 150); vector dstPoints; - for (int i = 0; i < detectedGridSize.height; i++) + bool isClockwiseBefore = + getDirection(centers[0], centers[detectedGridSize.width - 1], centers[centers.size() - 1]) < 0; + + int iStart = isClockwiseBefore ? 0 : detectedGridSize.height - 1; + int iEnd = isClockwiseBefore ? detectedGridSize.height : -1; + int iStep = isClockwiseBefore ? 1 : -1; + for (int i = iStart; i != iEnd; i += iStep) { for (int j = 0; j < detectedGridSize.width; j++) { @@ -1453,6 +1459,10 @@ void CirclesGridFinder::getCornerSegments(const vector > &points, cout << "Corners are counterclockwise" << endl; #endif std::reverse(segments.begin(), segments.end()); + std::reverse(cornerIndices.begin(), cornerIndices.end()); + std::reverse(firstSteps.begin(), firstSteps.end()); + std::reverse(secondSteps.begin(), secondSteps.end()); + std::swap(firstSteps, secondSteps); } }