在 opencv 中创建 4x4 mat 矩阵时出错

Error when creating a 4x4 mat matrix in opencv

我正在尝试使用 cv::Mat(4,4,CV_64F, data_m); 创建一个 4x4 矩阵, 其中 data_m 是一个浮点数组

float data_m[] = {rmatrix.at<float>(0,0),rmatrix.at<float>(0,1), rmatrix.at<float>(0,2), tvec[0],rmatrix.at<float>(1,0), rmatrix.at<float>(1,1), rmatrix.at<float>(1,2), tvec[1], rmatrix.at<float>(2,0), rmatrix.at<float>(2,1), rmatrix.at<float>(2,2), tvec[2],0.f ,0.f ,0.f, 1.f};    

rmatrix 是一个 3x3 矩阵,tvec 是一个 3x1 向量。

但是在初始化的时候translation_m

cv::Mat translation_m = cv::Mat(4,4,CV_64F, data_m);

最后八个元素未在 translation_m 矩阵中成功初始化。它 returns 一些奇怪的外星数字,例如 4.59121e-41

有人知道这里发生了什么吗?

您正在混合使用 double(64 位,CV_64F)和 float(32 位,CV_32F)。 当以 double 形式读取 float 数组时,您会在向量末尾之后读取,并且您正在读取未初始化的数据。

使用其中之一:

float data_m[] = ...
cv::Mat translation_m = cv::Mat(4,4,CV_32F, data_m);

double data_m[] = ...
cv::Mat translation_m = cv::Mat(4,4,CV_64F, data_m);