2011-02-25 84 views
2

以及我已經看到一些代碼轉換爲HSL的RGB;但如何在python中快速完成它。Python的RGB陣列到HSL和回

它對我來說很奇怪,例如photoshop在一秒鐘內在圖像上執行此操作,而在python中這通常需要永久。那麼至少我使用的代碼;所以認爲我使用錯誤的代碼來做到這一點

在我的情況下,我的形象是一個簡單但大的原始數組[r,g,b,r,g,b,r,g,b ....]

我想這是[H,S,L,H,S,L,H,S,L .......]

此外,我想能夠做到HSL以rgb

圖像實際上是640x480像素; 它會需要一些庫或包裝的C代碼(我從來沒有創建一個包裝),以儘快完成它?

+0

http://scikit-image.org/docs/dev/api/skimage.color.html – 2017-12-09 07:48:30

回答

3

稍後我寫了這個RGB to HSV converter。它從一個PIL圖像開始,但使用numpy來有效地進行數組操作。它可以非常容易地修改爲HSL。讓我知道你是否想要修改版本。

+0

ehm我想快速的做到這一點,我嘗試過這樣的事情,但是它在python中的緩慢在整個圖像上做到這一點,即使我用numpy數組來做。 – user613326 2011-02-27 13:55:34

+0

@ user613326:這將在我的筆記本電腦上以0.7秒的時間轉換640x480圖像。你需要多快?我估計一個專門編譯的圖書館可能只提供3倍的改進。 – Paul 2011-02-27 14:25:31

+0

儘管它沒有HSL但是HSV(它接近),我喜歡它中的代碼示例,最近我一直在尋找相關數學將它轉換爲另一種格式(不受真正的360度雙字)從你的代碼我可能能夠重寫,然後運行更快的版本(但不太精確)。 – user613326 2012-11-28 22:53:26

6

對於操作圖像數據,許多使用Python Imaging Library。但是,它不處理HSL顏色。幸運的是,Python帶有一個名爲colorsys的庫。下面是所用的colorsys一個例子來色彩模式之間進行轉換以每個像素級別:http://effbot.org/librarybook/colorsys.htm

colorsys還提供了一種功能,HSL轉換爲RGB:http://docs.python.org/library/colorsys.html

+0

該問題指定需要一種方法來快速完成 - 甚至用numpy進行矢量化,使用colorsys非常慢,除非我'我錯過了什麼。 – Markus 2012-02-01 19:10:49

+0

也是另一種可行的方法,我更喜歡Paul的低級麪糰,它給了我更多的數學思考和改進以實現我自己的目標,謝謝您的回答 – user613326 2012-11-28 22:55:40

+0

@Markus修改代碼以使其在numpy數組上工作非常容易。其實你只需要將最小/最大值改爲np.min/np.max ... – 2017-09-06 13:31:44

1

一種選擇是使用OpenCV的。他們的Python綁定非常好(雖然不是很了不起)。好處是它是一個非常強大的圖書館,所以這只是冰山一角。

你可能也可以使用numpy非常有效地做到這一點。