OpenCV вектор в Mat, но не element-> row - PullRequest
3 голосов
/ 04 декабря 2011

Существует очень простой способ построить Mat из вектора ... просто сделав:Матрица.Я хочу, чтобы каждый элемент моего вектора был помещен в каждый столбец матрицы.

As is:
vector<int> = [1,2,3,4]
Matrix = [1;2;3;4]

I want:
vector<int> = [1,2,3,4]
Matrix = [1,2,3,4]

Ответы [ 2 ]

5 голосов
/ 04 декабря 2011

Либо укажите форму и тип Матрицы и передайте векторные данные

   // constructor for matrix headers pointing to user-allocated data
    Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP);
    Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP);

Или вызовите функцию изменения формы на Мат, чтобы поменять число столбцов с песком строк (не изменяет никаких данных)

    // creates alternative matrix header for the same data, with different
    // number of channels and/or different number of rows. see cvReshape.
    Mat reshape(int _cn, int _rows=0) const;
2 голосов
/ 05 декабря 2011

Матрица, сформированная путем отражения матрицы через ее основную диагональ (т.е. чередование строк и столбцов), называется транспонированием.Используя OpenCV, вы можете легко получить транспонирование матрицы A как:

Mat A;
Mat A_transpose = A.t();

Если A - [1;2;3;4], A_transpose будет [1, 2, 3, 4], как требуется.

Таким образом, вы можете либо создать транспонированную копию вашей матрицы после преобразования ее из вектора, либо вы можете легко создать ее, когдавпоследствии требуется в ваших расчетах.

Mat A, B;
Mat answer = A.t() * B;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...