【问题标题】:Pillow Rotate is losing Alpha Values枕头旋转正在失去 Alpha 值
【发布时间】:2019-05-03 12:44:48
【问题描述】:

我正在使用某些像素的 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 194
Found at 96, 41 in Rotation 195
Alpha missing from rotation 196
Found at 98, 41 in Rotation 197
Found at 97, 41 in Rotation 198
Found at 98, 41 in Rotation 198
Alpha missing from rotation 199
Alpha missing from rotation 200
Found at 98, 41 in Rotation 201
Found at 97, 40 in Rotation 202
Found at 98, 40 in Rotation 202

使用 Pillow 5.3.0

我在轮换中做错了吗?据我所知,Expand=True 是我需要指定的唯一选项(以确保图像不会在某些方向被剪裁)?

我不喜欢使用 Pillow,但需要一些东西来跟踪各种调整大小和旋转操作中的特定像素坐标,并认为使用 Pillow 和跟踪 Alpha 值可以做到这一点。我真的不想尝试通过 RGB 值进行跟踪,但担心这可能会遇到同样的问题。还有其他建议吗?

【问题讨论】:

  • 不保证源图像中的每个像素在旋转时都会出现在结果中。基本上,您将一个栅格(网格)旋转到另一个栅格(网格)之上,并且在输出栅格中的每个位置,您可以通过线性或三次插值或通过源上像素的最近邻来计算新点。 PIL.Image.NEAREST 重采样可能运气更好。

标签: python python-imaging-library alpha


【解决方案1】:

不确定我是否擅长说明我在 cmets 中所说的内容 - 我希望在 Wikipedia 上找到精彩的动画,但惨遭失败。无论如何,我的意思是输入图像中的像素与旋转后输出图像中的像素之间没有一一对应的关系。

有时您使用插值,这意味着值会在多个邻居之间进行缩放,并且输出图像中会出现一组全新的像素值,而这些像素值在输入图像中不存在(想象在白色图像上旋转黑色图像)并且某些点最终可能会变成灰色),有时您选择 NEAREST_NEIGHBOUR 并且不会将新的像素值引入图像中。

无论哪种方式,这是我试图说明旋转的图形。您有两张图像,一张是红色的,一张是黑色的,像素位于线条的交点处。一张图片围绕中心像素在另一张图片上方旋转,因此黑色和红色图片中的图像相同。

现在看看我用绿色框起来的像素。它不会进入输出图像,因为它周围的 4 个角都更靠近原始图像中的其他像素。所以我是说原始像素沿着蓝线跳到输出图像中,但绿色的却没有……希望你明白!

【讨论】:

  • 是的,这是有道理的,感谢您抽出宝贵时间进行解释,我现在采用不同的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多