【问题标题】:Rotating image in python: extrapolate background colorpython中的旋转图像:推断背景颜色
【发布时间】:2018-09-05 16:55:55
【问题描述】:

我正在使用以下 python 代码旋转图像:

from PIL import Image

img = Image.open('banana.jpg')
rotated = img.rotate(10)
rotated.save('banana-rotated.jpg')

这进行了以下转换:

如您所见,背景是黑色的。 This question 询问如何用特定颜色填充背景。但是,我想用图像的颜色填充背景。因为我需要旋转很多图像,所以我不想将背景设置为固定颜色。

有什么方法可以在边缘扩展图像使用从图像外推的颜色?理想情况下,如果图像没有统一的背景,这也可以工作。

【问题讨论】:

  • 正确的方法是使用单独的图像作为背景,然后将另一个图像的transparent 版本(您希望旋转)放在背景图像的顶部。前景图像的旋转不会影响背景,也不会有任何可见的边框。
  • @anekix:这听起来很有希望。但是我应该使用什么作为背景图像?因为我旋转了许多图像,所以我需要为每个图像单独设置一个背景图像。我想我可以使用我想旋转的图像作为背景图像?但也许有更好的方法?
  • 这些图片是动态生成的吗?就像用户提交的一样,或者你只是有一堆你想要处理的图片?
  • 您可以参考this 寻求帮助。您得到的结果是预期的,因为您的示例中没有背景和前景图像的概念。
  • 如果你知道图像的类型,你可以得到4个角区域的RGB,并用它来填充新的角。这可能适用于您的图像。一般没有平面背景色,所以常用的方法是旋转+裁剪。

标签: python image colors rotation python-imaging-library


【解决方案1】:

这可能会有所帮助:https://pillow.readthedocs.io/en/5.2.x/releasenotes/5.2.0.html#image-rotate

Pillow 5.2.0 及更高版本,一个名为fillcolor 的新命名参数已添加到Image.rotate。此颜色指定要在旋转图像之外的区域中使用的背景颜色。

image.rotate(45, fillcolor='white')

如果图像旋转 x 度而不是 90,180,270 会有所帮助,

【讨论】:

  • 我认为作者已经明确写过他不想使用硬编码的颜色(如white),而是从图像中推断出的颜色。
  • @Ptaq666 您始终可以使用背景颜色作为参数。这是可以使用的众多解决方案之一。这是解决此问题的最简单方法。
【解决方案2】:

这不是很好,但你总是可以用原始边框的平均颜色填充边框

 image.rotate(5, fillcolor=tuple(np.mean(np.array(image)[0,:], axis=0).astype(int)))

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多