2013-06-27 3 views
3

Нет функции в OpenCV случайным образом перетасовать матрицу (упорядочен по строкам)?Случайный порядок shuffle cv :: Mat in OpenCV

Вход:

1 2 3 
4 5 6 
7 8 9 

Выход:

4 5 6 
7 8 9 
1 2 3 

резюме :: функция randShuffle только кажется случайным образом упорядочить элементы всего массива я использую более новый C++ API

+0

Насколько мне известно – Hammer

+0

opencv - отличная библиотека манипуляции матрицами, но для этого крайнего случая не существует никакого метода. – baci

+0

Это отстой, что такие тривиальные методы манипуляции матрицами отсутствуют. От парня, идущего с фона Python и MATLAB/OCTAVE, эти недостающие функции раздражают. – garak

ответ

7

Код для перетасовки строк матрицы:

cv::Mat shuffleRows(const cv::Mat &matrix) 
{ 
    std::vector <int> seeds; 
    for (int cont = 0; cont < matrix.rows; cont++) 
    seeds.push_back(cont); 

    cv::randShuffle(seeds); 

    cv::Mat output; 
    for (int cont = 0; cont < matrix.rows; cont++) 
    output.push_back(matrix.row(seeds[cont])); 

    return output; 
} 
+1

Фрагмент делает то, что требуется, но переменная 'patternMatrix' является опечаткой и вызывает ошибку времени компиляции и поэтому должна быть изменена на' matrix'. – Reza