#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. Это изображение называется image abc. Он имеет форму 300,300. Горизонтальные полосы также имеют цвет 123:
Вы можете «добавить» изображения, заменив пиксели в изображении 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)