Python 如何将圆形图像移动到较大图像的精确中心位置?

Python 如何将圆形图像移动到较大图像的精确中心位置?,python,image,image-processing,python-imaging-library,Python,Image,Image Processing,Python Imaging Library,我想将圆形图像移动到更大图像的精确中心位置。如何准确地完成这项任务 from IPython.display import display import numpy as np from PIL import Image, ImageDraw, ImageFilter def show_saved_image(str): img = Image.open(str) display(img) im1 = Image.open('rocket.jpg') im2 = Image.

我想将圆形图像移动到更大图像的精确中心位置。如何准确地完成这项任务

from IPython.display import display
import numpy as np
from PIL import Image, ImageDraw, ImageFilter

def show_saved_image(str):
    img = Image.open(str)
    display(img)

im1 = Image.open('rocket.jpg')
im2 = Image.open('lena.jpg')

#height, width, channels = im1.shape
im1_width, im1_height = im1.size
im1_centreX, im1_centreY = int(im1_width/2), int(im1_height/2)
im2_width, im2_height = im2.size
im2_centreX, im2_centreY = int(im2_width/2), int(im2_height/2)
print(im1_width, im1_height)
print(im2_width, im2_height)

radius = int(min(im2_width/2, im2_height/2))
ulX, ulY = im2_centreX-radius, im2_centreY-radius
lrX, lrY = im2_centreX+radius, im2_centreY+radius

desired_pointX, desired_pointY = im1_centreX-radius, im1_centreY-radius
# ![rocket_pillow_paste_out](data/dst/rocket_pillow_paste_out.jpg)

mask_im = Image.new("L", im2.size, 0)
draw = ImageDraw.Draw(mask_im)
draw.ellipse((ulX, ulY, lrX, lrY), fill=255)

# mask_im_blur = mask_im.filter(ImageFilter.GaussianBlur(10))
# mask_im_blur.save('mask_circle_blur.jpg', quality=95)

back_im = im1.copy()
back_im.paste(im2, (desired_pointX, desired_pointY), mask_im)

#back_im.paste(im2, (desired_pointX, desired_pointY), mask_im_blur)
back_im.save('output.jpg', quality=95)
    
im = Image.open('output.jpg')
draw = ImageDraw.Draw(im)
draw.ellipse((im1_centreX-4, im1_centreY-4, im1_centreX+4, im1_centreY+4 ), fill=(0, 255, 0), outline=(0, 0, 0))
draw.ellipse((desired_pointX-4, desired_pointY-4, desired_pointX+4, desired_pointY+4 ), fill=(255, 0, 0), outline=(0, 0, 0))
im.save('imagedraw.jpg', quality=95)

show_saved_image("imagedraw.jpg")
图像:

rocket.jpg

lena.jpg


如果有其他方法,那么也请帮我。

您只需要修改这一行

desired_pointX,desired_pointY=im1_centreX-半径,im1_centreY-半径

desired\u pointX,desired\u pointY=im1\u centreX-int(im2\u width/2),im1\u centreY-int(im2\u height/2)

你的
mask\u im
具有形状
im2.size
,因此你需要适应它,而不仅仅是圆的半径。由于半径为
int(im2\u高度/2)
,垂直对齐很好,但半径小于
int(im2\u宽度/2)
,这就是为什么向左移位不足。

包含的两幅图像相同。请检查谢谢-@PranayModukuru