修复 cv::转换点从均匀错误

Fixing cv::convertPointsFromHomogeneous Error

本文关键字:错误 cv 转换 修复      更新时间:2023-10-16

我使用convertPointsFromHomogeneous函数将齐次坐标(4D)转换为3D。

但是我得到一些错误:

OpenCV 错误:断言失败(n点>= 0) 在 cv::convertPointsFromHomogeneous,文件 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);

convertPointsFromHomogeneous的输入Mat应该是N通道Mat(在您的例子中N=4),类型为 CV_32FCV_32S

相反,您传递的是类型为 CV_64F 的单通道Mat

您可以像这样更正代码:

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 ,又名 Mat_<float> ),使代码不那么冗长。