#include <opencv2/opencv.hpp>

int main() {
    // 픽셀 좌표 (예: 객체를 탐지한 픽셀 좌표)
    cv::Point2f pixelPoint(100, 150);

    // 카메라 매트릭스 및 왜곡 계수 (카메라 캘리브레이션에서 얻은 값 사용)
    cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 1);
    cv::Mat distortionCoeffs = (cv::Mat_<double>(1, 5) << k1, k2, p1, p2, k3);

    // 카메라 좌표를 월드 좌표로 변환하는 함수
    cv::Matx44d transformationMatrix; // 여기에 변환 행렬이 저장됨
    cv::solvePnP(objectPoints, imagePoints, cameraMatrix, distortionCoeffs, transformationMatrix);

    // 픽셀 좌표를 카메라 좌표로 변환
    cv::Matx31d pixelCoordinates(pixelPoint.x, pixelPoint.y, 1.0);
    cv::Matx31d cameraCoordinates = cameraMatrix.inv() * pixelCoordinates;

    // 카메라 좌표를 월드 좌표로 변환
    cv::Matx41d worldCoordinatesHomogeneous = transformationMatrix * cv::Matx41d(cameraCoordinates(0), cameraCoordinates(1), cameraCoordinates(2), 1.0);
    cv::Matx31d worldCoordinates(worldCoordinatesHomogeneous(0), worldCoordinatesHomogeneous(1), worldCoordinatesHomogeneous(2));

    // 결과 출력
    std::cout << "픽셀 좌표: " << pixelPoint << std::endl;
    std::cout << "월드 좌표: " << worldCoordinates << std::endl;

    return 0;
}

 

-chatgpt

+ Recent posts