我使用convertPointsFromHomogeneous
函数将齐次坐标(4D)转换为3D。
但是我收到了一些错误:
OpenCV错误:cv :: convertPointsFromHomogeneous中的断言失败(npoints> = 0),文件fundam.cpp,第879行
请告诉我出了什么问题。
代码如下。
cv::Mat Thomogeneous(4,1,cv::DataType<double>::type); // translation vector
Thomogeneous.at<double>(0,0) = -70;
Thomogeneous.at<double>(1,0) = -95;
Thomogeneous.at<double>(2,0) = -120;
Thomogeneous.at<double>(3,0) = 1;
cv::Mat T(3,1,cv::DataType<double>::type); // translation vector
cv::convertPointsFromHomogeneous(Thomogeneous, T);
答案 0 :(得分:3)
输入Mat
到convertPointsFromHomogeneous
应为N
频道Mat
(在您的情况下为N=4
),类型为CV_32F
或{ {1}}。
您正在传递类型为CV_32S
的单个频道Mat
。
您可以更正以下代码:
CV_64F
另请注意,您可以使用cv::Mat1f Thomogeneous(4, 1);
Thomogeneous(0) = -70;
Thomogeneous(1) = -95;
Thomogeneous(2) = -120;
Thomogeneous(3) = 1;
// Reshape to 4 channel matrix
Mat Th = Thomogeneous.reshape(4);
cv::Mat T;
cv::convertPointsFromHomogeneous(Th, T);
(例如Mat_<Tp>
,又名Mat1f
)来减轻代码的冗长。