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

#opencv #image-processing #cv2

#opencv #обработка изображений #cv2

Вопрос:

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

Комментарии:

1. docs.opencv.org/3.2.0/d0/d86/tutorial_py_image_arithmetics.html

Ответ №1:

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

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

изображение xyz

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

изображение abc

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

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

заменить изображение

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

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

добавлено изображение

Если вы хотите усреднить пиксели в изображениях, вы можете использовать функцию 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)
  

добавить взвешенное