【发布时间】:2015-01-26 18:29:57
【问题描述】:
在下面的函数中,输入参数是一个 2 列的 Mat 矩阵, 我循环遍历它并返回一个只包含非零元素的新矩阵。
Mat LaneDetector::getHigherThanZero(const Mat& X)
{
vector<Vec2f> XX;
for(int i = 0; i < X.rows; ++i)
{
if(X.at<float>(i,1) > 0)
XX.push_back(Vec2f(X.at<float>(i,0), X.at<float>(i,1)));
}
Mat Y = Mat(XX).reshape(1);
return Y;
}
当我在主程序中运行它时,一切正常。当我从主要调用它时:
Mat Y = getHigherThanZero(X);
cout << Y << endl;
我得到了一些垃圾:
我在这里做错了什么?
【问题讨论】:
-
Mat是什么?你检查过它的复制/移动构造函数吗? -
可能是因为您没有实现与“Mat Y = getHigherThanZero(X)”一起使用的复制构造函数
-
Mat 是
cv::Mat- 复制构造函数已隐式在基类中实现。 -
顺便说一下,-1.5883997e+038 对应于
0xFEEEFEEE,一个神奇的cookie(根据wikipedia)是“微软的调试HeapFree()用来标记释放的堆内存” -
@SleuthEye - 谢谢,但这并不能帮助我解决我的问题 :-)