You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
The problem was in python bindings in void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray objPoints, OutputArray imgPoints).
detectedCorners may include aruco marker corners as vector<vector<Point2f>> or vector<Mat>. Any Mat in vector<Mat> must have 4 rows for 4 corners for one marker (one marker has 4 corners).
detectedCorners may include Charuco corners as vector<Point2f> or Mat. Python bindings add extra dimension to detectedCorners and therefore vector<Mat> case is additionally processed for charuco corners.
Until the PR merge, you can using custom matchImagePoints():
def matchImagePoints(charuco_board, charuco_corners, charuco_ids):
objPoints = []
imgPoints = []
for i in range(0, len(charuco_ids)):
index = charuco_ids[i]
objPoints.append(charuco_board.getChessboardCorners()[index])
# objPoints[-1][0][1] = charuco_board.getRightBottomCorner()[1] - objPoints[-1][0][1] # set old axis direction
imgPoints.append(charuco_corners[i])
return np.array(objPoints), np.array(imgPoints)
detectedCorners includes charuco corners in this case. Python bindings add extra dimension to detectedCorners and therefore without fix detectedCorners processed as aruco marker corners and matchImagePoints returns bad values:
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.
The problem was in python bindings in
void matchImagePoints(InputArrayOfArrays detectedCorners, InputArray detectedIds, OutputArray objPoints, OutputArray imgPoints)
.detectedCorners
may include aruco marker corners asvector<vector<Point2f>>
orvector<Mat>
. AnyMat
invector<Mat>
must have 4 rows for 4 corners for one marker (one marker has 4 corners).detectedCorners
may include Charuco corners asvector<Point2f>
orMat
. Python bindings add extra dimension todetectedCorners
and thereforevector<Mat>
case is additionally processed for charuco corners.Until the PR merge, you can using custom
matchImagePoints()
:Use sample from #23139 to see problem.
args:
-w=5 -h=7 -sl=0.04 -ml=0.02 -d=10 -v=choriginal.jpg
With fix:

detectedCorners
includes charuco corners in this case. Python bindings add extra dimension todetectedCorners
and therefore without fixdetectedCorners
processed as aruco marker corners andmatchImagePoints
returns bad values:Pull Request Readiness Checklist
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
Patch to opencv_extra has the same branch name.