使用opencv计算2D-3D对应关系

时间:2015-12-04 17:01:12

标签: c++ opencv 3d-reconstruction correspondence

我处理2d图像点和3d模型点对应。首先,我使用下面的代码:

cv::Mat cameraMatrix(3, 3, cv::DataType<double>::type);

cv::setIdentity(cameraMatrix);

std::cout << "Initial cameraMatrix: " << cameraMatrix << std::endl;

cv::Mat distCoeffs(4, 1, cv::DataType<double>::type);
distCoeffs.at<double>(0) = 0;
distCoeffs.at<double>(1) = 0;
distCoeffs.at<double>(2) = 0;
distCoeffs.at<double>(3) = 0;

cv::Mat rvec(3, 1, cv::DataType<double>::type);
cv::Mat tvec(3, 1, cv::DataType<double>::type);

cv::solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec, tvec);

std::cout << "rvec: " << rvec << std::endl;
std::cout << "tvec: " << tvec << std::endl;

std::vector<cv::Point2f> projectedPoints;
cv::projectPoints(objectPoints, rvec, tvec, cameraMatrix, distCoeffs, projectedPoints);

我希望projectionPoints [i]的位置等于imagepoints [i]的位置。但是当我写出他们的价值观时,他们却是不同的。

for (unsigned int i = 0; i < projectedPoints.size(); ++i)
{
    std::cout << "Image point: " << imagePoints[i] << " Projected to " << projectedPoints[i] << std::endl;
}

enter image description here

为什么这些值不同?

0 个答案:

没有答案