2014-10-01 43 views
0

我有一个尺寸为100 x 7000的整数数据类型的矩阵。我想转置它。我使用opencv库中的transpose()函数。但它给出了错误的结果。大多数值变成浮点数并且非常高,这在原始矩阵中不存在。这里是我的代码opencv函数转置()给出错误的结果,内存泄漏?

cv::Mat data; //data matrix with integer values, dimension is 100 x 7000 cv::Mat data_tp = cv::Mat(data.cols, data.rows, CV_32F); cv::transpose(data, data_tp);

我认为这可能是内存泄漏的问题,或任何类型的内存管理不善。因为这只是大代码的一部分。有关内存管理的任何提示或任何其他人面临此问题?

+2

尝试在隔离测试这部分代码,因为你可能有错误的罪魁祸首 - 这是可能的,你有某种堆破坏漏洞的早些时候程序。另外尝试在valgrind下运行,以捕捉与内存相关的任何错误。 – 2014-10-01 07:01:14

回答

5
cv::Mat data; //data matrix with integer values, dimension is 100 x 7000 
// here are 2 problems: 
// - you never need to pre-allocate the result. 
// - you try to transpose an int Mat into a float one. 
cv::Mat data_tp = cv::Mat(data.cols, data.rows, CV_32F); 
cv::transpose(data, data_tp); 

// instead, just use: 
cv::Mat data_tp = data.t(); 
+0

不适用于更高维的矩阵(当data.dims> 2时) – Quanlong 2017-06-29 10:26:06