에 도움이 감사 할 것이다. 점 구름을 2D 이미지로 "변환"한다는 것은 무엇을 의미합니까?
"변환"으로 프로젝트를 의미한다고 가정합니다.
opencv에서 점 구름 또는 해당 문제에 대한 3D 점은 projectpoints
: http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#projectpoints을 사용하여 2 차원 이미지에 투영 된 일 수 있습니다.
이는 핀홀 카메라 모델을 기반으로, 예를 들어 여기를 살펴 : http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/FUSIELLO4/tutorial.html
당신은이 질문에 대해 살펴 걸릴 alsot 수 있습니다 염두에 OpenCV's projectPoints function
베어 당신이되지 않습니다
단순화하기 위해 임의의 초점 거리를 가진 "완벽한"투영 모델 (카메라 렌즈 왜곡이 없음)을 사용할 수 있습니다. (만약 당신이 원래의 3D 데이터를 재구성 할 수 있다면 하고자 이미지를 표시하려면 투영 된 점의 값이 너무 높지 않도록 데이터에 따라 초점 거리를 가지고 놀아야합니다 (예 : 2k 해상도 이미지의 너비 인 2048 이상).
다음은 예입니다 : 귀하의 회신 다니엘에 대한
#include <string>
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
std::vector<cv::Point3d> Generate3DPoints();
int main(int argc, char* argv[])
{
// Read 3D points
std::vector<cv::Point3d> objectPoints = Generate3DPoints();
std::vector<cv::Point2d> imagePoints;
int f = 5; //focal length
for (unsigned int i = 0; i < objectPoints.size(); i++)
{
cv::Point3d orig_point = objectPoints[i];
imagePoints.push_back(cv::Point2d(
f*orig_point.x/orig_point.z, //x' = f*x/z
f*orig_point.y/orig_point.z) //y' = f*y/z
);
}
}
std::vector<cv::Point3d> Generate3DPoints()
{
std::vector<cv::Point3d> points;
double x, y, z;
x = .5; y = .5; z = -.5;
points.push_back(cv::Point3d(x, y, z));
x = .5; y = .5; z = .5;
points.push_back(cv::Point3d(x, y, z));
x = -.5; y = .5; z = .5;
points.push_back(cv::Point3d(x, y, z));
x = -.5; y = .5; z = -.5;
points.push_back(cv::Point3d(x, y, z));
x = .5; y = -.5; z = -.5;
points.push_back(cv::Point3d(x, y, z));
x = -.5; y = -.5; z = -.5;
points.push_back(cv::Point3d(x, y, z));
x = -.5; y = -.5; z = .5;
points.push_back(cv::Point3d(x, y, z));
for (unsigned int i = 0; i < points.size(); ++i)
{
std::cout << points[i] << std::endl << std::endl;
}
return points;
}
감사합니다, 나는 그것에 일하고 내가 어떤 문제에 직면하면 내가 다시 당신에게 얻을 것이다. – KHV