在另一张图片中添加图片

时间:2018-04-28 10:52:09

标签: python image insert

我想在另一个图像中插入图像,我已经能够使用,例如,img=open('logo.png')作为插入的图像和背景图像background=open('backgroundImg.png'),但是当我想使用askopenfilename时得到这个错误:

background.paste(img, offset)
AttributeError: 'numpy.ndarray' object has no attribute 'paste'

这是我的代码:

from PIL import Image
from tkFileDialog import askopenfilename
import cv2

filename1 = askopenfilename(filetypes=[("image","*.png")])
filename2 = askopenfilename(filetypes=[("image","*.png")])
img=cv2.imread(filename1,1)
background=cv2.imread(filename2,1)
img_w, img_h =img.shape[:2]
bg_w, bg_h = background.shape[:2]
offset = ((bg_w - img_w) // 2, (bg_h - img_h) // 2)
background.paste(img, offset)
background.save('savedImg/out6.png')

任何帮助将不胜感激 谢谢你^^

1 个答案:

答案 0 :(得分:0)

您只需使用徽标的值覆盖图片的值即可。您的图像是WxHx3阵列,您的徽标是W1xH1x3,假设W&lt; W1和H < H1。话虽如此,你可以简单地说:

background[offset[0]:offset[0]+img_w,offset[1]:offset[1]+img_h] = img

一个简单的测试:

import cv2
import numpy
background = numpy.zeros((100,100,3))
img = numpy.ones((10,10,3))
offset = numpy.array((10,10))
background[offset[0]:offset[0]+img.shape[0],offset[1]:offset[1]+img.shape[1]] = img
cv2.imshow("test", background)
cv2.waitKey(0)
cv2.destroyAllWindows()