2016-03-24 4 views
0

Я использую функцию изменения OpenCV, чтобы изменить матрицу из 25 строк и 1 столбец (так что у нас есть 25 значений данных) в Mat 5 строк и 5 столбцов.Функция изменения OpenCV не работает должным образом

data = mu.reshape(5, 5); 

Когда я смотрю на свою переменную данных в отладчике, она имеет 5 строк, но 1 столбец. Если я печатаю данные в строке (0) и col (0), он выводит все пять значений. Таким образом, каждая строка в col (0) содержит 5 значений.

Мой желаемый результат состоит в том, чтобы получить 5 строк и 5 столбцов, где на каждом (строка, столбец) будет одно значение.

Заранее благодарю вас за помощь.

+0

Первым параметром для изменения является количество каналов. Вы создаете 5-канальную матрицу из 5 строк и 1 столбца. Вам нужна 1-канальная матрица с 5 строками и 5 столбцами. Следовательно, 'mu.reshape (1,5);' или даже 'mu.reshape (0,5);'. Прочтите [docs] (http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-reshape) –

ответ

0

Вы, кажется, неверно истолковали смысл аргументов функции reshape().

Согласно documentation подпись

Mat Mat::reshape(int cn, int rows=0) const 

со следующим значением аргументов:

  • сп - Новое число каналов. Если параметр равен 0, количество каналов остается неизменным.
  • rows - Новое количество строк. Если параметр равен 0, количество строк остается неизменным.

Обратите внимание, что количество столбцов неявно - оно вычисляется из существующих свойств матрицы и двух параметров.

В соответствии с этим, код

data = mu.reshape(5, 5); 

создает матрицу 5-канальный 5 строк и 1 столбца.

Для того, чтобы изменить форму вы матрицы для одной матрицы канала 5х5, вы должны сделать следующее:

data = mu.reshape(1, 5); 

С другой стороны, так как входной матрицы уже один канал, вы можете также использовать

data = mu.reshape(0, 5); 
+0

Большое вам спасибо. Это имеет смысл! – Edster

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