修复cv :: convertPointsFromHomogeneous错误

时间:2016-02-09 11:18:54

标签: c++ opencv

我使用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);

1 个答案:

答案 0 :(得分:3)

输入MatconvertPointsFromHomogeneous应为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)来减轻代码的冗长。