簡體   English   中英

當我在numpy數組上使用PIL轉換時圖像顏色丟失(圖像)

[英]Loss of image color when I use PIL convert on numpy array (image)

我試圖將PIL與numpy數組一起使用,然后找到主要顏色。 首先,我的圖像是一個numpy數組(28,28),沒有從文件中讀取。 我使用以下代碼從該圖像獲取主色。

from PIL import Image
import numpy as np
myimage=np.random.randint(255,size=(28,28))
image = Image.fromarray(myimage,mode="P") # I use mode=P because if I didn't I will get an error in the next line.
result = image.convert('P', palette=Image.ADAPTIVE, colors=1)
result.putalpha(0)
colors = result.getcolors()

現在colors總是黑色[(784,(14,14,14,0)] ,但是,如果我將myimage保存到文件中並使用image=Image.open(myimage.png)我將獲得正確的colors=[(5807904, (222, 158, 23, 0))] 。任何想法為什么會發生以及如何解決。之所以我不首先將圖像保存到文件中是因為有效率措施,因為我有成千上萬張圖像在他們里面循環。

謝謝,

用您的代碼生成的圖像不包含顏色數據,因此也難怪您沒有得到它們。 image應使用以下內容創建:

# note the final '4' indicating the number of channels
# 4 for RGBA, 3 for RGB, 1 for grayscale
myimage = np.random.randint(255, size=(28, 28, 4))
image = Image.fromarray(myimage, mode='RGBA')

現在,這將模擬具有alpha通道的隨機彩色圖像。

在我不確切知道您期望什么的意義上,現在剩下的代碼對我來說還是個謎,但是從對磁盤加載的映像進行的測試以及從模擬數據獲得的結果中,我得到了類似的結果:

from PIL import Image
import numpy as np
import scipy.misc

# for reproducible results
np.random.seed(0)

def _calc(pil_image):
    result = pil_image.convert(mode='P', palette=Image.ADAPTIVE, colors=1)
    result.putalpha(0)
    colors = result.getcolors()
    print(colors)

myimage = np.random.randint(255, size=(28, 28, 3))
image = Image.fromarray(myimage, mode='RGBA')
_calc(image)

myimage = np.random.randint(255, size=(28, 28, 4))
image = Image.fromarray(myimage, mode='RGBA')
_calc(image)

myimage = scipy.misc.face(False)
image = Image.fromarray(myimage, mode='RGB')
_calc(image)


import urllib.request

urllib.request.urlretrieve(
    'https://www.python.org/static/img/python-logo.png',
    'python-logo.png')
image = Image.open('python-logo.png')
_calc(image)

我得到,我正確地相信:

[(784, (6, 0, 0, 0))]
[(784, (7, 0, 0, 0))]
[(786432, (111, 118, 102, 0))]
[(23780, (254, 254, 254, 0))]

暫無
暫無

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

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