我正在使用某些像素的 Alpha 值来跟踪它们在旋转过程中的位置。我注意到在某些情况下我会丢失设置的 Alpha 值。显示问题的示例代码: def showAlphas(rotation, img): imgPixels = img.load() foundAlpha = False for w in range(0, img.width): for h in range(0, img.height): if imgPixels[w, h][3]==50: print 'Found at {}, {} in Rotation {}'.format(w, h, rotation) foundAlpha = True if not foundAlpha: print 'Alpha missing from rotation {}'.format(rotation)img = Image.new('RGBA', (100, 50), color='black')img.putpixel((10, 10), (255, 0, 0, 50))for x in range(1, 360, 1): rotated = img.rotate(x, expand=True) showAlphas(x, rotated)示例输出:Found at 96, 41 in Rotation 194Found at 96, 41 in Rotation 195Alpha missing from rotation 196Found at 98, 41 in Rotation 197Found at 97, 41 in Rotation 198Found at 98, 41 in Rotation 198Alpha missing from rotation 199Alpha missing from rotation 200Found at 98, 41 in Rotation 201Found at 97, 40 in Rotation 202Found at 98, 40 in Rotation 202使用 Pillow 5.3.0我在轮换中做错了什么吗?据我所知, Expand=True 是我需要指定的唯一选项(以确保图像不会在某些方向上被剪裁)?我不依赖于使用 Pillow,但需要一些东西来跟踪各种调整大小和旋转操作中的特定像素坐标,并认为使用 Pillow 和跟踪 Alpha 值可以做到这一点。我真的不想尝试通过 RGB 值进行跟踪,但担心这可能会遇到同样的问题。还有其他建议吗?
1 回答

HUWWW
TA贡献1874条经验 获得超12个赞
不确定我是否擅长说明我在评论中所说的话 - 我希望在维基百科上找到一个精彩的动画,但惨遭失败。无论如何,我所说的是输入图像中的像素与旋转后输出图像中的像素之间不是一一对应的。
有时您使用插值,这意味着值在多个邻居之间进行缩放,并且输出图像中会出现一组全新的像素值,而这些像素值在输入图像中不存在(想象一下在白色图像上旋转黑色图像和一些点可能最终变成灰色),有时您选择 NEAREST_NEIGHBOUR 并且不会将新的像素值引入图像。
无论哪种方式,这是我试图说明旋转的图形。您有两张图像,一张是红色,一张是黑色,像素位于线条的交点处。一个图像围绕中心像素在另一个图像上方旋转,因此黑色和红色图像中的图像相同。
现在看看我用绿色框起来的像素。它不会进入输出图像,因为它周围的 4 个角都更接近原始图像中的其他像素。所以我是说原始像素沿着蓝线跳到输出图像中,但绿色像素没有成功……希望你能明白!
添加回答
举报
0/150
提交
取消