首頁  >  文章  >  後端開發  >  如何有效率地將 PIL 影像轉換為 NumPy 陣列以進行像素轉換?

如何有效率地將 PIL 影像轉換為 NumPy 陣列以進行像素轉換?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-12 13:24:02171瀏覽

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?

將PIL 影像轉換為NumPy 陣列以實現高效的像素轉換

在處理影像處理任務時,通常需要轉換PIL ( Python成像庫)將影像轉換為NumPy 數組,以實現更快的像素級轉換。這種轉換可以有效地操作影像數據,從而實現更複雜和時間優化的影像操作。

要將PIL 影像轉換為NumPy 數組,可以使用以下程式碼片段:

pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)

此程式碼從PIL 影像中讀取影像數據,並將其重塑為3 維NumPy數組,其中每個維度代表影像的高度、寬度和通道(例如,RGB)。

要在執行所需的轉換後將NumPy 陣列轉換回PIL 影像,可以使用以下程式碼:

new_pic = Image.fromarray(modified_pix)

但是,此方法不允許使用修改後的NumPy 陣列直接修改原始PIL 影像。

在 PIL 版本 1.1.6 之前,修改原始 PIL 影像需要將 NumPy 陣列轉換為元組列表:

data = list(tuple(pixel) for pixel in modified_pix)
pic.putdata(data)

但是,這種方法可能很慢且效率低下。

在PIL 版本1.1.6 及更高版本中,在PIL 影像和NumPy 陣列之間轉換的首選方法是:

pix = numpy.array(pic)

此指令產生一個以行、列和RGB 通道為維度的3 維NumPy 陣列。

執行像素轉換後,可以使用以下方法將更新的陣列轉換回PIL 影像:

new_pic = Image.fromarray(modified_pix)

或者,可以使用修改後的NumPy 陣列修改原始PIL 影像:

pic.putdata(modified_pix)

以上是如何有效率地將 PIL 影像轉換為 NumPy 陣列以進行像素轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn