2012-06-13 6 views
5

У меня есть несколько изображений в Mat объектов все с теми же размерами Я хотел бы создать один Бикс cv::Mat объект, чтобы держать их всеConcatenate Мат в OpenCV

Так размерность новой матрицы: widthNew = widthOld x число матриц, высота остается неизменной.

Я обнаружил, что такая копия может быть сделана с помощью:

void cvCopy(const CvArr* src, CvArr* dst, const CvArr* mask=NULL) 

, но затем, как бы маски быть определена три раза для трех матриц ?.

С уважением, Моатаза

+0

Будьте уверены, что максимальный размер для IplImage составляет около 4000 * 4000. Вам также может потребоваться уменьшить разрешение вашего входного изображения. – jlengrand

+0

Маска необязательна, вам не нужно ее определять. –

+0

хорошо. Я это сделаю, thnx –

ответ

5

Вы используете КОРОЛЬ определить образ, который на самом деле является областью целевого изображения, а затем скопировать в этом. см Copy an cv::Mat inside a ROI of another one

+0

Thnx. Хорошо работает –

1

Вы, вероятно, хотите, чтобы принять смотреть на the source code of cvShowManyImages(), которая является функцией, которая принимает несколько изображений в качестве входных данных и объединяет их в один 3-канальном изображение, которое будет отображаться:

метод используется для установите ROI одного большого изображения, а затем измените размер и скопируйте входные изображения на Single Big Image.

Если вы создаете изображение назначения, достаточно большое, чтобы удерживать другие изображения, вам не нужно изменять их размер.

Если вы хотите бы узнать, как конвертировать между IplImage < ->cv::Mat, check this thread.

+0

звучит интересно, thnx. Я думаю, что я скопирую идею реализовать что-то подобное, используя чистый cv :: Mat вместо IpImage –

2

Я думаю, что есть простой способ сделать это. OpenCV имеет неописанные методы, называемые hconcat() и vconcat(). Первый - для горизонтальной конкатенации, второй - для вертикальной конкатенации.

Вы можете использовать их таким образом:

Mat A, B; 
... //In this part you initialize the Mat A and Mat B. 

Mat H, V; //These are the destination matrices 
hconcat(A, B, H); 
vconcat(A, B, V); 

Я надеюсь, что это может помочь.

+0

. Точка назначения может быть такой же, как и один из источников, поэтому 'vconcat (out, out1, out); vconcat (out, out2, out); 'отлично работал для меня в многопоточном контексте (для объединения вывода из отдельных потоков). – Izaan

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

  • Нет связанных вопросов^_^