ini*_*-22 1 python opencv image-processing
我想使用 openCV 和 python 在 xyz.jpg 上添加图像“abc.jpg”。我已经得到了坐标 x,y,我必须在该坐标上添加图像,并且还调整了“abc.jpg”的大小,以便它适合图像。现在我该如何添加它?
对于计算机来说,图像只是一个数字网格。有几种方法可以“添加”数字网格。在这个答案中,我将解释在图像“xyz”上添加图像“abc”的三种方法。这是一个非常简单的任务 a + b = c。但是,只有当图像形状相同时,这才有效。要处理不同形状的图像,只需使用代码修改图像的某些部分image[y: y+height, x: x+width]。
首先,让我们看一下我创建的示例图像。图像xyz有垂直条,形状为 600,600。条形的颜色为 123(其中 0 为黑色,255 为白色)。
接下来,我创建了另一个图像以添加到图像xyz之上。该图像称为图像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)
Run Code Online (Sandbox Code Playgroud)
您可以通过对数组求和来“添加”图像。这将导致图像在某些地方比任一源图像更亮。如果值超出范围 (0, 255),求和将产生奇怪的结果。
x,y = 123,123
added = xyz.copy()
added[y: y + abc_size, x: x + abc_size] += abc
cv2.imshow('added', added)
Run Code Online (Sandbox Code Playgroud)
如果您想对图像中的像素进行平均,可以使用 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)
Run Code Online (Sandbox Code Playgroud)