2014-10-01 2 views
0

У меня есть матрица целочисленного типа данных с размерами 100 x 7000. Я хочу транспонировать его. Я использовал функцию transpose() из библиотеки opencv. но это дает ложные результаты. Большинство значений становятся числами с плавающей запятой и очень высокими, которых нет в исходной матрице. Вот мой кодФункция opencv transpose() дает ложные результаты, утечка памяти?

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, чтобы поймать любые ошибки, связанные с памятью. –

ответ

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

Смежные вопросы