如何使用x,y坐标在另一个图像上添加图像?

时间:2019-04-22 14:11:16

标签: opencv image-processing cv2

我想使用openCV和python在xyz.jpg上添加图像'abc.jpg'。我有坐标x,y,我必须在该坐标上添加图像,并且还要调整我的“ abc.jpg”的大小,以使其适合图像。现在如何添加它?

1 个答案:

答案 0 :(得分:0)

对于计算机,图像只是数字的网格。有几种“加”数字网格的方法。在这个答案中,我将解释在图像“ xyz”上添加图像“ abc”的三种方法。这是一个非常简单的任务a + b = c。但是,这仅在图像具有相同形状时才有效。要处理不同形状的图像,仅应使用代码image[y: y+height, x: x+width]修改图像的某些部分。

首先,让我们看一下我创建的示例图像。图片 xyz 具有垂直条,形状为600,600。条形为颜色123(0为黑色,255为白色)。

image xyz

接下来,我创建了另一个图像,添加到图像 xyz 的顶部。此图像称为图像 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