簡體   English   中英

Python:如何從numpy數組中編寫單通道png文件?

[英]Python: How to write a single channel png file from numpy array?

我想從python中的numpy數組寫一個單通道png圖像? 在Matlab中即可

A = randi(100,100,255)
imwrite(uint8(A),'myFilename.png','png');

我看過使用from PIL import ImageImage.fromarray()但它們僅用於jpeg和3通道png ...

我已經使用opencv找到了解決方案,我將在此處發布。 希望它會縮短別人的搜索...

這是一個使用opencv / cv2的解決方案

import cv2
myImg = np.random.randint(255, size=(200, 400)) # create a random image
cv2.imwrite('myImage.png',myImg)

PIL的Image.fromarray()根據傳遞的numpy數組的數據類型自動確定要使用的模式 ,例如,您可以使用的8位灰度圖像:

from PIL import Image
import numpy as np

data = np.random.randint(256, size=(100, 100), dtype=np.uint8)
img = Image.fromarray(data)  # uses mode='L'

但是這只適用於你的數組使用兼容的數據類型,如果你只使用data = np.random.randint(256, size=(100, 100))可以產生int64數組(typestr <i8 ),PIL可以處理。

您還可以指定其他模式,例如將32位數組解釋為RGB圖像:

data = np.random.randint(2**32, size=(100, 100), dtype=np.uint32)
img = Image.fromarray(data, mode='RGB')

在內部Image.fromarray()只是嘗試猜測正確的模式和大小,然后調用Image.frombuffer()

然后可以將圖像保存為PIL 可以處理的任何格式,例如: img.save('filename.png')

您可能不希望將OpenCV用於簡單的圖像處理。 如建議的那樣,使用PIL:

im = Image.fromarray(arr)
im.save("output.png", "PNG")

你試過這個嗎? 什么在這里失敗,導致你得出結論,這只是JPEG?

暫無
暫無

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

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