Я пытаюсь вернуть значение типа Eigen::MatrixXf
, но это приводит к ошибке сегментации.Пытаясь отладить, я обнаружил, что если тип возвращаемого значения - это что-то вроде float
или int
с соответствующим возвращаемым значением в функции, функция выполняется успешно.Я попытался диагностировать проблему из документации Eigen от здесь , но без какой-либо помощи.
MatrixXf& create_V_matrix(cv::Mat H) {
// Gather V matrix
MatrixXf v11 = get_vij_matrix(H, 0, 0);
MatrixXf v12 = get_vij_matrix(H, 0, 1);
MatrixXf v22 = get_vij_matrix(H, 1, 1);
MatrixXf V;
V << v12.transpose(),
(v11-v12).transpose();
return V;
}
MatrixXf get_vij_matrix(cv::Mat H, int i, int j) {
// Create v matrix at i and j
MatrixXf vij;
vij << H.at<float>(0, i)*H.at<float>(0, j),
H.at<float>(0, 1)*H.at<float>(1, j) +
H.at<float>(1, i)*H.at<float>(0, j),
H.at<float>(1, i)*H.at<float>(1, j),
H.at<float>(2, i)*H.at<float>(0, j) +
H.at<float>(0, i)*H.at<float>(2, j),
H.at<float>(2, i)*H.at<float>(1, j) +
H.at<float>(1, i)*H.at<float>(2, j),
H.at<float>(2, i)*H.at<float>(2, j);
return vij;
}
Это приводит к Segmentation fault(core dumped)
, когда вызывается create_V_matrix(cv::Mat H
).