head-pose-estimation icon indicating copy to clipboard operation
head-pose-estimation copied to clipboard

solvePNP计算结果很离谱请教

Open beyondli opened this issue 7 years ago • 5 comments

问下,我代码运行起来后,发现solvePnP后的rotation_vec, translation_vec里面的数值都异常,都是e+30,e-11等,可能是哪里的问题,该函数输入的landmark点我看了下,都是对的,因为显示出来都没有问题。其他参数我没有改,感觉也不应该有非常大的影响。

不知道哪里的问题。。。。。,特请教,谢谢!

beyondli avatar Nov 02 '17 09:11 beyondli

你好,我覺得應該是內參數的問題,你可以先用opencv自帶的程式校正一下K和D兩個參數 sample code在(opencv/samples/cpp/calibration.cpp) 另外請問你的video input解析度是多少呢,我的是640*480

lincolnhard avatar Nov 02 '17 11:11 lincolnhard

恩,K我觉得差不多(按image size设),但D我确实没有管。 我的也是640*480. 恩我校准下D试下

beyondli avatar Nov 07 '17 05:11 beyondli

这样算,基本可用

double focal_length = img.cols; // Approximate focal length.

 cv::Point2d center = cv::Point2d(img.cols/2,img.rows/2);

 cv::Mat cam_matrix = (cv::Mat_<double>(3,3) << focal_length, 0, center.x, 0 , focal_length, center.y, 0, 0, 1);

 cv::Mat dist_coeffs = cv::Mat::zeros(4,1,cv::DataType<double>::type);

vvhh2002 avatar Jan 06 '18 17:01 vvhh2002

这样算,基本可用

double focal_length = img.cols; // Approximate focal length.

 cv::Point2d center = cv::Point2d(img.cols/2,img.rows/2);

 cv::Mat cam_matrix = (cv::Mat_<double>(3,3) << focal_length, 0, center.x, 0 , focal_length, center.y, 0, 0, 1);

 cv::Mat dist_coeffs = cv::Mat::zeros(4,1,cv::DataType<double>::type);

这样设置是不是默认人脸中心在图像中心?

happyboyneu avatar Oct 10 '18 09:10 happyboyneu

@lincolnhard 你好,问一下。我标定内参之后,发现python版本的可以正常预测欧拉角(一个立方体),但是Cpp版只有一半的立方体(另外4个点沿着射线飞出去了)。然后,看到这个issue,对比了一下python脚本执行显示的窗口确实比较小,然后在Cpp版中就指定了解析度(640*480),然后也正常了。

能说一下原因么?

roachsinai avatar Dec 15 '18 14:12 roachsinai