OpenCV: объединение двух изображений с использованием OpenCV

Каков наилучший способ сделать размер поля 2 равным полю 1, чтобы CvCopy(); может быть применено:

введите здесь описание изображения

ИЗМЕНИТЬ:

Возможно я не правильно поставил вопрос. Поэтому я перефразирую. Учитывая изображение 2 (как показано выше), я хочу преобразовать его, как показано ниже:
введите описание изображения здесь

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

Кроме того, несмотря на то, что эти изображения (коробки) показаны пустыми, они могут иметь внутри некоторые объекты, которые я не показывал.


person gpuguy    schedule 22.06.2012    source источник
comment
Что такое коробка и что не так с функцией изменения размера? http://opencv.willowgarage.com/documentation/python/imgproc_geometric_image_transformations.html#resize   -  person Herr von Wurst    schedule 22.06.2012


Ответы (2)


Для этого вы можете использовать функцию copyMakeBorder. Я не знаю dotnet, ниже пример кода на python. Также посетите документы для вышеуказанной функции: DOCS

Сначала загрузите два изображения. imb — это большое изображение, а ims — это маленькое изображение.

import cv2
import numpy as np

imb = cv2.imread('messi4.jpg')
ims = cv2.imread('template.jpg')

Теперь пусть rb,cb будет количеством строк и столбцов большого изображения, и аналогично rs,cs для маленького изображения.

rb,cb = imb.shape[:2]
rs,cs = ims.shape[:2]

Наконец, чтобы использовать функцию copyMakeBorder, вам нужно добавить количество строк и столбцов сверху, снизу, слева и справа. Значит, нам нужно их найти.

top = (rb-rs)/2
bottom = rb - rs - top
left = (cb-cs)/2
right = cb - cs - left

Наконец, примените функцию.

res = cv2.copyMakeBorder(ims,top,bottom,left,right,cv2.BORDER_CONSTANT)

Теперь смотрите результаты:

Исходное маленькое изображение :

введите здесь описание изображения

Изменено новое изображение :

введите здесь описание изображения

Он имеет тот же размер, что и мое большое изображение (здесь не показано, подумал, что в этом нет необходимости, если хотите, я могу загрузить)

person Abid Rahman K    schedule 22.06.2012

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

Вы можете изменить размер изображений, используя cv::resize( ) (это функция С++ - я не использовал точечную сеть OpenCV).

Детали реализации: в API.

Что касается слияния, это зависит от вашего определения, но простое использование cv::copy( ) не поможет. Полное руководство по объединению изображений в документации, здесь.

person n00dle    schedule 22.06.2012
comment
Вы читали ссылку, которую вы мне прислали? , он говорит Предупреждение: поскольку мы добавляем src1 и src2, они оба должны иметь одинаковый размер (ширину и высоту) и тип. Кроме того, изменение размера для меня бесполезно, так как оно искажает изображение. - person gpuguy; 22.06.2012
comment
Я знаю об этом. Ваш первоначальный вопрос подразумевал, что вы хотели изменить размер одного до того же размера, что и другой, а затем объединить. - person n00dle; 23.06.2012