я использовал OpenCV для преобразования углов Эйлера к rotationmatrixCv :: Mat CvType изменения при возвращении
cv::Mat transformEulerToRotation(const cv::Mat &euler) {
float rot[9]
//transforming things
//...
cv::Mat resMat = cv::Mat(3, 3, CV_32F, rot);
//here can I check the result
std::cout << "resMat " << resMat << std::endl;
return resMat;
}
void otherFunction() {
//...
std::cout << "rotMat function " << transformEulerToRotation(euler) << std::endl;
cv::Mat rotMat = transformEulerToRotation(euler).clone;
std::cout << "rotMat variable " << rotMat << std::endl;
}
В результате я получаю, например:
resMat [0.99965221, -0.024546526, -0.009639469;
-0.017124595, 0.99955207, 0.024376612;
0.010061417, 0.017124617, 0.99980277]
rotMat function [6.4592681e-31, 0, 2.6510468e-36;
0, 4.291036e-38, 0;
6.4569209e-31, 0, 0.21559119]
rotMat variable [0.99965221, -0.024546526, 1.5537966e-32;
-3.7597382e+19, 0.99955207, 0.024376612;
9.3246211e-39, 0, 0.21557593]
Я не знаю, что меняется, когда я просто возвращаю cv :: Mat. Что я могу сделать, чтобы вернуть матрицу с теми же значениями.
Мы не знаем, что вы делаете внутри этой функции (что, вероятно, является проблемой). Попробуйте вернуть клонированную матрицу: 'return resMat.clone();' поскольку ваш внутренний буфер 'rot', вероятно, просто будет содержать мусор после выхода из функции. Или просто 'return cv :: Mat (3, 3, CV_32F, rot) .clone();' – Miki
Да, это ответ. Я должен клонировать коврик. Спасибо – BeJay
Рад, что это помогло, отправлено как ответ, тогда – Miki