I am having difficulties in detecting charuco board. I am working on a 3d scan iOS application.
cv::Mat intrinMat(3,3,CV_64FC1);
intrinMat.at<Float64>(0,0) = intrinsics.columns[0][0];
intrinMat.at<Float64>(0,1) = intrinsics.columns[1][0];
intrinMat.at<Float64>(0,2) = intrinsics.columns[2][0];
intrinMat.at<Float64>(1,0) = intrinsics.columns[0][1];
intrinMat.at<Float64>(1,1) = intrinsics.columns[1][1];
intrinMat.at<Float64>(1,2) = intrinsics.columns[2][1];
intrinMat.at<Float64>(2,0) = intrinsics.columns[0][2];
intrinMat.at<Float64>(2,1) = intrinsics.columns[1][2];
intrinMat.at<Float64>(2,2) = intrinsics.columns[2][2];
std::vector<cv::Vec3d> rvecs, tvecs;
//cv::Mat distCoeffs = cv::Mat::zeros(8, 1, CV_64F);
cv::Mat distCoeffs = cv::Mat::zeros(14, 1, CV_64FC1);
//cv::Mat distCoeffs;
detect(dictionary, corners, ids, pixelBuffer);
NSMutableArray *arrayMatrix = [NSMutableArray new];
if(ids.size() == 0) {
return arrayMatrix;
}
//cv::aruco::estimatePoseSingleMarkers(corners, markerSize, intrinMat, distCoeffs, rvecs, tvecs);
cv::aruco::estimatePoseBoard(corners, ids, charucoBoard, intrinMat, distCoeffs, rvecs, tvecs);
NSLog(@"found: rvecs.size(): %lu", rvecs.size());
cv::Mat rotMat, tranMat;
for (int i = 0; i < rvecs.size(); i++) {
cv::Rodrigues(rvecs[i], rotMat);
cv::Mat extrinsics = rotateRodriques(rotMat, tvecs[i]);
SCNMatrix4 scnMatrix = [ArucoCV transformToSceneKitMatrix:extrinsics];
SKWorldTransform *transform = [SKWorldTransform new];
transform.arucoId = ids[i];
transform.transform = scnMatrix;
[arrayMatrix addObject:transform];
}
return arrayMatrix;
}
my code works fine when its estimatePoseSingleMarker But I get error when estimateposeboard
terminating with uncaught exception of type cv::Exception: OpenCV(4.1.2) /Users/5dof/Downloads/opencv/opencv-4.1.2/modules/core/src/copy.cpp:254: error: (-215:Assertion failed) channels() == CV_MAT_CN(dtype) in function âcopyToâ
I am not using any copy methods, I have tried to change to all 4 channels. no luck.
please tell me what I am missing.