【发布时间】:2022-01-24 01:55:04
【问题描述】:
在 PIL 中,我将一个矩形旋转了一个角度并将其粘贴回背景图像。 我想知道特定角的新坐标是什么。
function(old_coord) => 新坐标
我在文档中读过它提到旋转中心默认是图像的中心。
这是我的代码:
import PIL
from PIL import Image, ImageDraw
import os
background = Image.open('background.jpg')
rectangle = Image.open("rectangle.png")
my_angle = 30
rectangle_rotate = Image.Image.rotate(rectangle, angle=my_angle, resample=Image.BICUBIC, expand=True)
# box: 2-tuple giving the upper left corner
px = int(background.size[0] / 2)
py = int(background.size[1] / 2)
background.paste(im=rectangle_rotate,
box=(px, py),
mask=rectangle_rotate)
# The new position I'm getting is wrong, how come?????
pos_xNew = px * math.cos(math.radians(my_angle)) + py * math.sin(math.radians(my_angle))
pos_yNew = -px * math.sin(math.radians(my_angle)) + py * math.cos(math.radians(my_angle))
print('pos_xNew:', pos_xNew)
print('pos_yNew:', pos_yNew)
draw_img_pts = ImageDraw.Draw(background)
r = 10
# Drawing a simple small circle circle for visualization
draw_img_pts.ellipse((pos_xNew - r, pos_yNew - r, pos_xNew + r, pos_yNew + r), fill='red')
background.save('example_with_roatation.png')
如何找到新的坐标值?我不断得到错误值。
矩形图像(输入):
按预期零旋转得到的输出:
旋转 30 度后得到的输出:
【问题讨论】:
-
如果您放回已删除的
import语句,如果您共享输入和输出图像并显示您得到的结果以及错误的原因/方式,这将很有帮助。谢谢。 -
@MarkSetchell 没问题,所以我已经发布了我的输入文件和输出文件。我想了解我错过了什么。谢谢!
-
问题是三个部分:1)矩形围绕其右上角旋转 2)然后对其进行剪裁,引入额外的移位 3)该点围绕背景的左上角旋转。要修复,您需要 1)围绕矩形右上角旋转点 2)计算并在顶部添加旋转移位
-
@Marat 感谢您的评论 abd 指出了我错误的地方,但我不清楚该怎么做。可以分享一下sn-p吗?
标签: python image-processing python-imaging-library affinetransform