我想知道怎么在Python中围绕某个特定的像素旋转一张图片。我正在尝试把一组夜空的图片调整回来。因为星星是围绕北极星转的,所以我可以把北极星当作旋转的中心,然后把每张图片旋转,让星星对齐。
简单来说,如果每张图片的像素位置用一个叫 a 的向量表示,而北极星的位置用 p 表示,那么新的位置 new_p 可以通过以下公式计算:
a
p
new_p
new_p = a + R * (a-p)
这里的 R 是一个叫做 旋转矩阵 的东西。
不过会有一个问题,因为 new_p 可能不是一个整数的值。你可以反过来做。对于旋转后图片的每个像素,使用上面公式的反向变换,这样你就能得到原始图片中的像素。由于得到的值也可能不是整数,所以可以像 wu-pixels 那样,取周围像素的值(周围像素的点的分布量可以作为取样的权重)。
在phadej的回答中,图像上一个点的旧坐标和新坐标之间的转换是一种仿射变换。
PIL(Python图像库)有一个叫做transform的方法,可以对图像进行仿射变换。
transform
transform的文档在这个页面的底部。