Как добавить изображение поверх другого изображения, используя координаты x, y? - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу добавить изображение 'abc.jpg' в xyz.jpg, используя openCV и python. У меня есть координаты x, y, к которым я должен добавить изображение, а также изменил размер моего «abc.jpg», чтобы он поместился на изображении. Теперь, как я могу добавить это?

1 Ответ

0 голосов
/ 22 апреля 2019

Для компьютеров изображения - это просто сетка чисел.Есть несколько способов «добавить» сетку чисел.В этом ответе я объясню три способа добавления изображения «abc» на изображение «xyz».Это очень простая задача a + b = c.Но это работает, только если изображения имеют одинаковую форму.Для работы с изображениями различной формы необходимо изменить только определенные части изображений с помощью кода image[y: y+height, x: x+width].

. Для начала давайте взглянем на созданные мной образцы изображений.Изображение xyz имеет вертикальные полосы и форму 600 600.Полоски имеют цвет 123 (где 0 - черный, а 255 - белый).

image xyz

Далее я создал другое изображение для добавления поверх изображения хуг .Это изображение называется image abc .Он имеет форму 300 300.Горизонтальные полосы также имеют цвет 123:

image abc

Вы можете «добавить» изображения, заменив пиксели в xyz изображение с пикселями в abc изображение:

x,y = 123,123
replace = xyz.copy()
replace[y: y + abc_size, x: x + abc_size] = abc
cv2.imshow('replace', replace)

replace image

Вы можете «добавить» изображения, суммируя массивы,Это приведет к тому, что в некоторых местах изображение будет ярче, чем любое из исходных изображений.Суммирование даст странные результаты, если значения выходят за пределы диапазона (0, 255).

x,y = 123,123
added = xyz.copy()
added[y: y + abc_size, x: x + abc_size] += abc
cv2.imshow('added', added)

added image

Если вы хотите усреднить пикселина изображениях вы можете использовать функцию cv2.addWeighted ().

background = np.zeros_like(xyz)
x,y = 123,123
background[y: y + abc_size, x: x + abc_size] = abc
add_weighted = cv2.addWeighted(background, .5, xyz, .5, 1)
cv2.imshow('add_weighted', add_weighted)

add weighted

...