imgproc: C-API cleanup, drawContours refactor#25564
Merged
asmorkalov merged 6 commits intoopencv:4.xfrom May 17, 2024
Merged
Conversation
Contributor
Author
|
For some reason ABI verification has failed on buildbot, it complains two function has been removed: https://pullrequest.opencv.org/buildbot/builders/precommit_linux64/builds/107321/steps/Compare%20ABI%20dumps/logs/report-html The problem is related to the changes in this PR, but I'm not sure if this is a severe issue. |
Contributor
|
ABI check has been updated. |
mshabunin
added a commit
to mshabunin/opencv
that referenced
this pull request
May 28, 2024
imgproc: C-API cleanup, drawContours refactor opencv#25564 Changes: * moved several macros from types_c.h to cvdef.h (assuming we will continue using them) * removed some cases of C-API usage in _imgproc_ module (`CV_TERMCRIT_*` and `CV_CMP_*`) * refactored `drawContours` to use C++ API instead of calling `cvDrawContours` + test for filled contours with holes (case with non-filled contours is simpler and is covered in some other tests) There is one case where old drawContours behavior doesn't match the new one - when `contourIdx == -1` (means "draw all contours") and `maxLevel == 0` (means draw only selected contours, but not what is inside). From the docs: > **contourIdx** Parameter indicating a contour to draw. If it is negative, all the contours are drawn. > **maxLevel** Maximal level for drawn contours. If it is 0, only the specified contour is drawn. If it is 1, the function draws the contour(s) and all the nested contours. If it is 2, the function draws the contours, all the nested contours, all the nested-to-nested contours, and so on. This parameter is only taken into account when there is hierarchy available. Old behavior - only one first contour is drawn:  a New behavior (also expected by the test) - all contours are drawn: 
mshabunin
added a commit
to mshabunin/opencv
that referenced
this pull request
Jun 10, 2024
imgproc: C-API cleanup, drawContours refactor opencv#25564 Changes: * moved several macros from types_c.h to cvdef.h (assuming we will continue using them) * removed some cases of C-API usage in _imgproc_ module (`CV_TERMCRIT_*` and `CV_CMP_*`) * refactored `drawContours` to use C++ API instead of calling `cvDrawContours` + test for filled contours with holes (case with non-filled contours is simpler and is covered in some other tests) There is one case where old drawContours behavior doesn't match the new one - when `contourIdx == -1` (means "draw all contours") and `maxLevel == 0` (means draw only selected contours, but not what is inside). From the docs: > **contourIdx** Parameter indicating a contour to draw. If it is negative, all the contours are drawn. > **maxLevel** Maximal level for drawn contours. If it is 0, only the specified contour is drawn. If it is 1, the function draws the contour(s) and all the nested contours. If it is 2, the function draws the contours, all the nested contours, all the nested-to-nested contours, and so on. This parameter is only taken into account when there is hierarchy available. Old behavior - only one first contour is drawn:  a New behavior (also expected by the test) - all contours are drawn: 
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes:
CV_TERMCRIT_*andCV_CMP_*)drawContoursto use C++ API instead of callingcvDrawContours+ test for filled contours with holes (case with non-filled contours is simpler and is covered in some other tests)Note:
There is one case where old drawContours behavior doesn't match the new one - when
contourIdx == -1(means "draw all contours") andmaxLevel == 0(means draw only selected contours, but not what is inside).From the docs:
Old behavior - only one first contour is drawn:

New behavior (also expected by the test) - all contours are drawn:
