-1

IDE VS2013에서 OpenCV2 (3.0.0)를 사용하고 있습니다. 필자는 3D 포인트 클라우드 데이터 (매개 변수 XYZ)를 사용하고 있으며 3d 포인트 클라우드를 2D 이미지로 변환 할 수 있으며 PCL을 연결하지 않고 Opencv를 사용하여 클라우드 데이터를 이미지로 변환 할 수 있습니다.OpenCV를 사용하여 클라우드 데이터를 2 차원 이미지로 변환

가능한가 ???

가능하면 누구나 OpenCV의 샘플 코드로 변환 방법을 제안 할 수 있습니다.

어떤 제안이 질문은 정말 분명하지 않다 미리

답변

0

에 도움이 감사 할 것이다. 점 구름을 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; 
} 
+0

감사합니다, 나는 그것에 일하고 내가 어떤 문제에 직면하면 내가 다시 당신에게 얻을 것이다. – KHV

관련 문제