簡體   English   中英

將圖像(png和jpg)轉換為多維列表,然后在python中向后轉換

[英]Convert a image (png and jpg) to a multi-dimensional list and backwards in python

我使用PIL將圖像轉換為單色,然后轉換為列表列表,但我不知道如何使用rgb圖像。

有人可以給我一個方向如何將圖像轉換為多維列表並向后轉換python?

讓我們從一個已知的樣本圖像開始。 這是一個小的3x2實際工作和一個更大的一個,所以你可以看到它:

小:

在此輸入圖像描述

大:

在此輸入圖像描述

你可以打開一個圖像,並使其成為一個高效,快捷numpy多維數組是這樣的:

#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Open image from disk
im = Image.open('image.png')
na = np.array(im)

這將是這樣的:

array([[[255,   0,   0],                      # Red
        [  0, 255,   0],                      # Green
        [  0,   0, 255]],                     # Blue

       [[  0,   0,   0],                      # Black
        [255, 255, 255],                      # White
        [126, 126, 126]]], dtype=uint8)       # Mid-grey

並將其轉換回PIL圖像並像這樣保存(只需將此代碼附加到上面的代碼中):

# Convert array back to Image
resultim = Image.fromarray(na)
resultim.save('result.png')

一些說明

注1

如果你期望並想要一個RGB888圖像,並且你正在打開一個PNG圖像,你可能得到一個沒有每個像素RGB值的palettised圖像,而是每個像素的調色板都有一個索引,一切都會出錯!

舉例來說,這里是與上面相同的圖像,但是當生成應用程序將其保存為palettised圖像時:

array([[0, 1, 2],
       [3, 4, 5]], dtype=uint8)

這里是從im.getpalette()返回的im.getpalette()

[255,
 0,
 0,
 0,
 255,
 0,
 0,
 0,
 255,
 0,
 0,
 0,
 255,
 255,
 255,
 126,
 126,
 126,
 ...
 ...

所以,故事的寓意是......如果您期待RGB888圖像,請使用:

Image.open('image.png').convert('RGB')

筆記2

同樣,如果你打開一個包含透明度的PNG文件,它將有4個通道,最后一個是alpha / transparency,如果你想丟棄alpha通道,你應該調用convert('RGB')

注3

如果您不想要中間圖像,可以將加載和保存縮寫為單行:

# Load and make array in one go
na = np.array(Image.open('image.png').convert('RGB'))

# Convert back to PIL Image and save in one go
Image.fromarray(na).save('result.png')

關鍵詞 :圖像,圖像處理,numpy,數組,ndarray,PIL,Pillow,Python,Python3,調色板,PNG,JPG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM