所以我有一个包含三个全局 Mat 的对象(请耐心等待),我希望填充 double ,我还有一个打印方法
所以在Main.hpp
Main class {
...
Mat FIXED;
Mat one;
Mat two;
...
}
在我的 Main.cpp 中有
void Main::printMat( Mat mat ) {
int rows = mat.rows;
int cols = mat.cols;
for (int j = 0, j < cols; j++ ) {
for (int i = 0, i < rows; i++ ) {
printf( "%lf ", mat.at<double>(i,j));
}
printf("\n");
}
}
因此对于任何矩阵输入,它的所有内容都可以正常存储。
printMat(one); <--this works
这很好用,但后来我做到了
two = FIXED.clone();
然后就崩溃了,我不知道为什么要帮忙
printMat(one); <--this doesnt work
如果我注释掉 .clone() 行它会起作用,如果我制作一个相同大小的空白矩阵并保存到 FIXED 它不起作用。
最佳答案
对于任何为此苦苦挣扎的人,原因是我如何创建一个数组。
所以我最初做了一个打印方法,因为
cout << someMat << endl;
给我奇怪的数字
事实证明那是错误所在,它应该给我存储的正常值。
我通过传入 Array[row][col] 使用方法在方法中制作 Mat
void foo() {
one = Mat(Array.rows, Array.cols, CV_64F, Array);
}
void bar() {
printMat(one)//error happens here
}
main (...) {
foo();
bar();
}
事实证明,构造函数使用数组的引用 和不是 值,因此当我离开该方法时,我将那部分内存丢失给垃圾收集器。
它在我提到的那条线之后断线的事实纯属巧合。 (因为那是在不同的方法中,GC 决定清理这一点)
关于c++ - OpenCV c++ Mat MADNESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36624872/