Cv::Mat CvType在返回时发生更改
Cv::Mat CvType changes when return
我使用OpenCv将欧拉角转换为旋转矩阵
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]
我不知道当我刚返回简历时发生了什么变化::Mat。我能做些什么来取回具有相同值的矩阵。
我确信clone()
方法有效,但如果您确实关心性能,则应尽量避免复制。其思想是首先创建cv::Mat
,并直接对其数据进行操作。在您的情况下
cv::Mat transformEulerToRotation(const cv::Mat &euler)
{
cv::Mat rotMat(3, 3, CV_32F);
float* rot = rotMat.ptr<float>();
// You can operate on rot now
// transforming things
// ...
// Check the result
std::cout << "rotMat" << rotMat<< std::endl;
return rotMat;
}
一旦退出函数,缓冲区rot
将包含垃圾值。您需要clone()
矩阵来创建内部数据的深层副本,因为简单的副本只会创建另一个指向相同内部数据的Mat
标头(它会被损坏)。
所以你可以:
return resMat.clone();
或者避免创建一个中间矩阵:
return cv::Mat(3, 3, CV_32F, rot).clone();
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- Difference in displaying cv2 Mat
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- 如何发送 Mat H=findHomography 返回 Matlab
- 如何将 cv::mat 对象从 python 模块传递到 c++ 函数并返回返回的 cv::mat 类型为对象?
- 通过引用传递 cv::Mat 或返回它
- C++ cv::Mat 返回向量的<rectangle>线程异步
- 将 Opencv Mat 返回到节点.js v8
- 为什么CV :: MAT的向量总是返回第一个图像
- 迭代 CalcHist 返回的 Mat
- 如何从C++中的矩阵 (Mat) 返回特定值的索引
- Linux下的OpenCV:无法获取Mat size (cv:: size),只返回MSize
- OpenCV Mat 方法"at" Linux 中返回奇怪的字符
- OpenCV Mat在函数返回和使用copyTo
- Cv::Mat CvType在返回时发生更改