在 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);
我正在尝试使用 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);