【问题标题】:Python RGB array to HSL and back [duplicate]Python RGB数组到HSL并返回[重复]
【发布时间】:2011-07-03 23:47:53
【问题描述】:

我已经看到了一些将 RGB 转换为 HSL 的代码;但是如何在 python 中快速完成。

这对我来说很奇怪,例如 Photoshop 在图像上会在一秒钟内完成此操作,而在 python 中这通常需要很长时间。至少我使用的代码;所以认为我使用了错误的代码来做到这一点

在我的例子中,我的图像是一个简单但很大的原始数组 [r,g,b,r,g,b,r,g,b ....]

我希望这是 [h,s,l,h,s,l,h,s,l .......]

我也希望能够对 rgb 进行 hsl

图像实际上是 640x 480 像素; 是否需要一些围绕 c 代码的库或包装器(我从未创建过包装器)才能快速完成?

【问题讨论】:

标签: python c rgb


【解决方案1】:

为了处理图像数据,许多人使用Python Imaging Library。但是,它不处理 HSL 颜色。幸运的是,Python 附带了一个名为 colorsys 的库。下面是一个 colorsys 用于在每像素级别上转换颜色模式的示例:http://effbot.org/librarybook/colorsys.htm

colorsys还提供了HSL转RGB的功能:http://docs.python.org/library/colorsys.html

【讨论】:

  • 问题指出需要一种方法来快速完成 - 即使使用 numpy 进行矢量化,使用 colorsys 也非常慢,除非我遗漏了什么。
  • 也是另一种有效的方法,我更喜欢 Paul 的 asnwer 面团,它让我有更多的数学思考和改进,以实现我自己的目标,感谢您的回答
  • @Markus 很容易修改代码以使其适用于 numpy 数组。其实你只需要将 min/max 更改为 np.min/np.max...
【解决方案2】:

我不久前写了这个RGB to HSV converter。它以 PIL 图像开始,但使用 numpy 有效地执行数组操作。它可以很容易地修改为 HSL。如果您想要修改后的版本,请告诉我。

【讨论】:

  • @user613326:这可以在我的笔记本电脑上在 0.7 秒内转换 640x480 图像。你需要多快?我估计一个专用的编译库可能只会提供 3 倍的改进。
  • 尽管它不是 HSL 而是 HSV(附近),但我喜欢其中的代码示例,最近我一直在寻找相关的数学来将其转换为另一种格式(未绑定到真正的 360度 Dwords)从您的代码中,我可能能够重写它,然后运行更快的版本(但不太精确)。
【解决方案3】:

一种选择是使用 OpenCV。他们的 Python 绑定非常好(虽然并不令人惊奇)。好处是它是一个非常强大的库,所以这只是冰山一角。

您也可以使用 numpy 非常有效地做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多