OpenCV: разница между матрицей с 1 столбцом типа 8UC3 и 3 столбцами из 8UC1 - PullRequest
1 голос
/ 06 мая 2011

Допустим, я создаю матрицу M1 из 5 строк и 1 столбца типа 8UC3 для хранения компонентов RGB изображения. Затем я создаю другую матрицу M2 из 5 строк и 3 столбцов типа 8UC1 для повторного хранения компонентов RGBimage.

Есть ли разница в способе хранения этих двух типов матриц в памяти?Из того, что я понимаю из http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00053000000000000000 (обычно рекомендуемое руководство по OpenCV по Stackoverflow), указатель данных матрицы указывает на первый индекс массива данных (матрица внутренне сохраняется как массив) и различные компоненты RGBхранятся в переплетенном виде (в случае 8UC3).

Моя логика говорит, что они должны быть такими же, как в случае 1 столбца 8UC3 (M1), для каждого столбца хранятся компоненты RGB, а в случае 3 столбцов 8UC1 (M2) каждый столбец хранитКомпонент RGB.Надеюсь, мне удалось хорошо сформулировать свой вопрос.

Заранее спасибо!

1 Ответ

0 голосов
/ 23 сентября 2013

Ваше понимание верно.Расположение памяти будет точно таким же.Таким образом, вы можете дешево преобразовать представление вперед и назад с помощью метода reshape .

Отличие в том, как алгоритмы OpenCV будут обрабатывать эти матрицы.

Скажем, объем памяти следующий:

255 0 0 
255 0 0 
255 0 0 
255 0 0 
255 0 0 

И вы хотите вызватьфункция изменения размера, чтобы добавить 3 столбца.Тогда в случае 5x1 Mat CV_8UC3, результат будет

255 0 0 255 0 0
255 0 0 255 0 0
255 0 0 255 0 0
255 0 0 255 0 0
255 0 0 255 0 0

А в случае 5x3 Mat CV_8UC1, результат будет

255 255 0 0 0 0
255 255 0 0 0 0
255 255 0 0 0 0
255 255 0 0 0 0
255 255 0 0 0 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...