OpenCV: объединение двух изображений с помощью OpenCV
Каков наилучший способ сделать размер поля 2 равным Box 1, чтобы CvCopy(); может быть применено:
РЕДАКТИРОВАТЬ:
Возможно, я не правильно поставил вопрос. Поэтому я перефразирую это. Учитывая изображение 2 (как показано выше), я хочу преобразовать его, как показано ниже:
По сути, я должен добавить черную рамку через него. изменение размера не будет работать, так как мое изображение будет искажено. Другими словами, я должен добавить нули в определенную толщину вокруг изображения.
Также, хотя показано пустым, эти изображения (коробки) могут иметь некоторые объекты внутри них, которые я не показывал.
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)
Теперь посмотрим на результаты:
Исходное маленькое изображение:
Модифицированный новый образ:
Он имеет тот же размер, что и мое большое изображение (здесь не показывалось, думал, что в этом нет необходимости, если хотите, я могу загрузить)
Расширение меньшего не будет лучшей идеей, поскольку вы получите много искажений изображения - скорее было бы лучше уменьшить большее, если окончательный размер не является проблемой.
Вы можете изменить размер изображения, используя cv::resize( )
(это функция C++ - я не использовал OpenCV dot net).
Детали реализации находятся в API.
С точки зрения слияния, это зависит от вашего определения, но просто с помощью cv::copy( )
не буду этого делать Здесь есть полное руководство по слиянию изображений в документации.