2014-12-04 3 views
2

У меня проблема. У меня есть изображение. Затем я должен разбить изображение на две равные части. Я сделал это так (код компилируется, все хорошо):Объединить два изображения Mat в один

Mat image_temp1 = image(Rect(0, 0, image.cols, image.rows/2)).clone(); 
Mat image_temp2 = image(Rect(0, image.rows/2, image.cols, image.rows/2)).clone(); 

Тогда я должен изменить каждую часть самостоятельно и, наконец, сливаются в одно целое. Я понятия не имею, как это сделать правильно. Как я должен объединить эти 2 части изображения в одно изображение?
Пример: http://i.stack.imgur.com/CLDK7.jpg

ответ

6

Существует несколько способов сделать это, но лучший способ я нашел, чтобы использовать cv::hconcat(mat1, mat2, dst) для горизонтальное слияние или cv::vconcat(mat1, mat2, dst) для вертикальной.

Не забудьте позаботиться о пустом корпусе с матричной матрицей!

+2

Whoa! Я не могу поверить, что эти функции отсутствуют в документации. – brotherofken

3

Кажется, что cv::Mat::push_back это именно то, что вы ищете:

C++: аннулируются Mat :: push_back (Const Mat & м): Добавляет элементы в нижней части матрицы.

Parameters:  
    m – Added line(s). 

Методы добавления одного или нескольких элементов в нижней части матрицы. Когда elem is Mat, его тип и количество столбцов должны быть одинаковыми, как в матрице контейнеров .

При желании, вы можете создать новый cv::Mat надлежащего размера и места частей изображения непосредственно в него:

Mat image_temp1 = image(Rect(0, 0, image.cols, image.rows/2)).clone(); 
Mat image_temp2 = image(Rect(0, image.rows/2, image.cols, image.rows/2)).clone(); 
... 
cv::Mat result(image.rows, image.cols); 
image_temp1.copyTo(result(Rect(0, 0, image.cols, image.rows/2))); 
image_temp2.copyTo(result(Rect(0, image.rows/2, image.cols, image.rows/2)); 
1

Как об этом:

Mat newImage = image.clone(); 
Mat image_temp1 = newImage(Rect(0, 0, image.cols, image.rows/2)); 
Mat image_temp2 = newImage(Rect(0, image.rows/2, image.cols, image.rows/2)); 

Не используя clone() создавать временные изображения, вы неявно изменения newImage когда вы изменяете временные изображения без необходимости объединить их снова. После изменения image_temp1 и image_temp2, newImage будет точно таким же, как если бы вы разделили, модифицировали, а затем объединили субимажи.

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