opencv 및 Aruco를 처음 사용했습니다. 저는 두 개의 서로 다른 Aruco 마커의 축 각도의 차이점을 알아 내려고했습니다. 예를 들어 각도 차이 b/w는 실제 세계에서 마커의 두 (1, 0, 0) 벡터입니다. 내 이해에서 변형은 로컬 좌표 -> 카메라 좌표 -> 월드 좌표 순서로 발생합니다. 그리고 두 개의 aruco 마커의 각도 차이는 이제 같은 세계 좌표로 나타납니다. 누군가이 과정이 어떻게 이루어 졌는지 설명 할 수 있습니까? 아니면 각도 차이를 찾는 더 좋은 방법이 있습니까? aruco 모듈세계 좌표계에서 Aruco 마커의 축 - 천사의 차이점을 얻는 방법은 무엇입니까?
- 변환 및 회전 벡터 (× 3) estimatePoseSingleMarkers() 함수 : I 파이썬과 OpenCV의 알려진
코딩하고있다. (회전 및 평행 이동 벡터는로드 리 게스()를 사용하여 행렬 (3x3)로 변환 할 수 있습니다.
- 카메라 카메라 보정을 통한 매트릭스 (3x3) 및 dist_coefs 매트릭스 (1x5).
- 사용 6x6_250 aruco 마커
Upate :
- 세계 = 카메라가
- 다음은 aruco의 XYZ 구성 요소를 그리는 기능입니다 좌표 좌표입니다. 원점 또는 카메라가 (0, 0, 0) 인 것 같습니다. aruco 마커의 변환 및 회전 행렬을 원점의 x, y, z 구성 요소에 적용하여 aruco 마커의 x, y, z 구성 요소를 얻습니다. 그게 맞습니까?
/** */
void drawAxis(InputOutputArray _image, InputArray _cameraMatrix, InputArray _distCoeffs,
InputArray _rvec, InputArray _tvec, float length) {
CV_Assert(_image.getMat().total() != 0 &&
(_image.getMat().channels() == 1 || _image.getMat().channels() == 3));
CV_Assert(length > 0);
// project axis points
vector<Point3f> axisPoints;
axisPoints.push_back(Point3f(0, 0, 0));
axisPoints.push_back(Point3f(length, 0, 0));
axisPoints.push_back(Point3f(0, length, 0));
axisPoints.push_back(Point3f(0, 0, length));
vector<Point2f> imagePoints;
projectPoints(axisPoints, _rvec, _tvec, _cameraMatrix, _distCoeffs, imagePoints);
// draw axis lines
line(_image, imagePoints[0], imagePoints[1], Scalar(0, 0, 255), 3);
line(_image, imagePoints[0], imagePoints[2], Scalar(0, 255, 0), 3);
line(_image, imagePoints[0], imagePoints[3], Scalar(255, 0, 0), 3);
}