2015-08-03 3 views
0

Проецируемое изображение не изменяется, когда я изменяю переменную down_range. Все проецируемые точки имеют одинаковое значение Y при проецировании, и оно остается таким, несмотря на изменение каждой переменной (x, y, z, pitch, roll и yaw). Есть что-то, чего я не хватает?Проблемы с opencv projectPoints

Соответствующий код

// Vision Target Coordinates 
vector<Point3f> objectPoints = getObjectData(); 

// Create camera matrix for Kinect with focal length found online 
Mat cameraMatrix = setCameraMatrix(); 

vector<Point2f> projectedPoints(objectPoints.size()); 

//3D Rotation and Translation vectors 
Mat rvec1(3,1, cv::DataType<double>::type); 
Mat tvec1(3,1, cv::DataType<double>::type); 

Mat rvec2(3,1, cv::DataType<double>::type); 
Mat tvec2(3,1, cv::DataType<double>::type); 

//Initialize to zero 
rvec1 = Scalar::all(0); 
tvec1 = Scalar::all(0); 
rvec2 = Scalar::all(0); 
tvec2 = Scalar::all(0); 

// Create an image to display projected points 
Mat img(height, width, CV_8UC3); 

//get inputs from user, CR, DR, UP, pitch, roll and yaw 

tvec1.at<double>(0, 0) = -cross_range*12; // Xpos (in) 
tvec1.at<double>(1, 0) = -down_range*12; // Ypos (in) 
tvec1.at<double>(2, 0) = -up_range*12;  // Zpos (in) 
rvec1.at<double>(0, 0) = -pitch*CV_PI/180;; // X rot (rad) 
rvec1.at<double>(1, 0) = -yaw*CV_PI/180; // Y rot (rad) 
rvec1.at<double>(2, 0) = -roll*CV_PI/180; // Z rot (rad) 

projectPoints(objectPoints, rvec1, tvec1, cameraMatrix, distCoeffs, projectedPoints); 

vector<Point3f> getObjectData() 
{ 
vector<Point3f> points; 

points.push_back(Point3f(-31.0, 10.0, 0.0)); 
points.push_back(Point3f(31.0, 10.0, 0.0)); 
points.push_back(Point3f(31.0, -10.0, 0.0)); 
points.push_back(Point3f(-31.0, -10.0, 0.0)); 
points.push_back(Point3f(-27.0, 6.0, 0.0)); 
points.push_back(Point3f(27.0, 6.0, 0.0)); 
points.push_back(Point3f(27.0, -6.0, 0.0)); 
points.push_back(Point3f(-27.0, -6.0, 0.0)); 
points.push_back(Point3f(-103.5, 25.69, 0.0)); 
points.push_back(Point3f(-41.5, 25.69, 0.0)); 
points.push_back(Point3f(-41.5, -3.31, 0.0)); 
points.push_back(Point3f(-103.5, -3.31, 0.0)); 
points.push_back(Point3f(-99.5, 21.69, 0.0)); 
points.push_back(Point3f(-45.5, 21.69, 0.0)); 
points.push_back(Point3f(-45.5, 0.69, 0.0)); 
points.push_back(Point3f(-99.5, 0.69, 0.0)); 
points.push_back(Point3f(41.5, 25.69, 0.0)); 
points.push_back(Point3f(103.5, 25.69, 0.0)); 
points.push_back(Point3f(103.5, -3.31, 0.0)); 
points.push_back(Point3f(41.5, -3.31, 0.0)); 
points.push_back(Point3f(45.5, 21.69, 0.0)); 
points.push_back(Point3f(99.5, 21.69, 0.0)); 
points.push_back(Point3f(99.5, 0.69, 0.0)); 
points.push_back(Point3f(45.5, 0.69, 0.0)); 

return points; 
} 

ответ

0

Вы проходящее вращения Эйлера, то есть ошибка. Преобразование в Rodrigues как OpenCV не имеет ничего общего с Эйлером.