cv::Mat dist_coeffs = cv::Mat::zeros(4, 1, cv::DataType<double>::type);
cv::solvePnP(model_points, image_points, camera_matrix, dist_coeffs, rotation_vector, translation_vector);
nose_end_point3D.push_back(cv::Point3d(0, 0, 1000.0));
cv::projectPoints(nose_end_point3D, rotation_vector, translation_vector, camera_matrix, dist_coeffs, nose_end_point2D);
cv::line(*mat, image_points[0], nose_end_point2D[0], cv::Scalar(255, 0, 0), 2);
cout << "Rotation Vector: " << endl << rotation_vector << endl;
cv::Rodrigues(rotation_vector, rotation_matrix); //convert 3x1 to 3x3
double* r = rotation_matrix.ptr<double>();
printf("rotation mat: \n %.3f %.3f %.3f\n%.3f %.3f %.3f\n%.3f %.3f %.3f\n", r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8]);
double projMatrix[12] = {r[0],r[1],r[2],0,r[3],r[4],r[5],0,r[6],r[7],r[8],0};
cv::Mat cameraMatrix, rotMatrix, transVect, rotMatrixX, rotMatrixY, rotMatrixZ;
cv::Vec3d eulerAngles;
cv::decomposeProjectionMatrix(cv::Mat(3, 4, CV_64FC1, projMatrix),
cameraMatrix,
rotMatrix,
transVect,
rotMatrixX,
rotMatrixY,
rotMatrixZ,
eulerAngles);
printf("Face Rotation Angle: %.5f %.5f %.5f\n", eulerAngles[0], eulerAngles[1], eulerAngles[2]);//up-down angle, left-right angle, close-far angle
Q1. Are the values inside eulerAngles variable eulerAngles[0], eulerAngles[1], eulerAngles[2]) mean up-down face angle, left-right face movement angle, close-far angle respectively ?
Q2. What is the range of values for full front face detection as i am trying to determine a full front face only for recognition ? So seeking your advice regarding optimization.
Q3. The side face is also giving me 22 degrees on eulerAngles[2] ? but i only want to detect front face only ?
Q4. Can i use eulerAngles to calculate distance of the object from the camera or is there another technique ?
I am sorry if i am asking basic questions but i have just started working with opencv.
Thanks.