как передать OpenCV мат по ссылке - PullRequest
0 голосов
/ 18 сентября 2018

у меня есть 1 матрица (3 канала) -> каналы cv :: Mat [3];

& 3 матрицы (1 канал) -> cpu_filter0, cpu_filter90, cpu_filter120

ранее я делал что-то подобное,

cv::Mat cpu_filter0,cpu_filter90,cpu_filter120
cv::Mat channels[] = {cpu_filter0,cpu_filter90,cpu_filter120}

но теперь я хочу сделать это

cv::Mat cpu_filter0,cpu_filter90,cpu_filter120
cv::Mat channels3[3];
channels[0] = &cpu_filter0, channels[1] = &cpu_filter90, channels[0] = &cpu_filter120;

или

cv::Mat channels3[] = {&cpu_filter0_0,&cpu_filter120_120,&cpu_filter240_240};

хотите знать, как правильно это сделать ??

1 Ответ

0 голосов
/ 18 сентября 2018

Вы говорите, что использовали cv::Mat channels[3]; для создания многоканальной матрицы?Поскольку это не то, что он делает, это создает массив в стиле c с 3 матрицами.

Сначала убедитесь, что вы хорошо знаете язык (C ++) и как работают массивы (стиль C) (я обнаружил, этот учебник , но я его не читал).

Затем прочитайте параграф "Подробное описание" здесь .

Чтобы суммировать еговверх, существуют разные способы создания cv :: Mat, например:

cv::Mat m(10, 10, CV_32FC3);

, который создает матрицу 10x10 с 3 каналами 32-битных чисел с плавающей запятой.Другие значения можно найти здесь .Просто добавьте «C» для желаемого количества каналов.

Теперь, как передать их в качестве ссылки?Просто как всегда:

void my_func(cv::Mat &param) {
    // do stuff
}

// in another function
cv::Mat m(10, 10, CV_32FC3);
my_func(m);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...