Ошибка при создании матрицы 4x4 в opencv - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать матрицу 4x4 с cv::Mat(4,4,CV_64F, data_m);, где 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. Он возвращает какое-то странное число пришельцев, например 4.59121e-41.

Кто-нибудь знает, что здесь происходит?

1 Ответ

1 голос
/ 28 октября 2019

Вы микшируете double (64 бита, CV_64F) и float (32 бита, CV_32F). Когда вы читаете ваш массив с плавающей запятой как удвоенный, вы идете после конца вектора и читаете неинициализированные данные.

Используйте:

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);
...