2013-08-12 23 views
1

저는 cv :: projectPoints를 사용하여 3D 점의 벡터에 해당하는 픽셀을 얻습니다.OpenCV : projectPoints가 음수 값을 반환 할 수 있습니까?

포인트가 모두 서로 가깝습니다.

문제는

는 이력서 :: projectPoints가 음의 값을 반환하는 것이 정상인가 ... 몇 가지 포인트에 대해 내가 올바른 픽셀을 얻을 좌표하지만, 다른 위해 내가 -22599 같은 이상한 음의 값을 얻을 수 있다는 것입니다 아니면 버그 내 코드에서?

void SingleCameraTriangulator::projectPointsToImage2(const std::vector<cv::Vec3d>& pointsGroup, const double scale, std::vector<Pixel>& pixels) 
{ 
    cv::Vec3d 
     t2, r2; 

    decomposeTransformation(*g_12_, r2, t2); 

    cv::Mat imagePoints2; 

    cv::projectPoints(pointsGroup, r2, t2, *camera_matrix_, *distortion_coefficients_, imagePoints2); 

    for (std::size_t i = 0; i < imagePoints2.rows; i++) 
    { 
     cv::Vec2d pixel = imagePoints2.at<cv::Vec2d>(i); 
     Pixel p; 
     p.x_ = pixel[0]; 
     p.y_ = pixel[1]; 
     if ((p.x_ < 0) || (p.x_ > ((1/scale) * img_1_->cols)) || (p.y_ < 0) || (p.y_ > ((1/scale) * img_1_->rows))) 
     { 
      cv::Vec3d point = pointsGroup[i]; 
      std::cout << point << " - " << pixel << " - " << pixel*scale << "problema" << std::endl; 
     } 
     p.i_ = getBilinearInterpPix32f(*img_2_, scale * p.x_, scale * p.y_); 

     pixels.push_back(p); 
    } 
} 

미리 제안 해 주셔서 감사합니다.

답변

1

reprojectImageTo3D (3D 점을 얻기 위해 사용합니까?) 이상한 점에 대해 큰 z 좌표 (10000)를 부여하므로 여기에 문제가 있다고 생각합니다.