![](/img/trans.png)
[英]How to write and read a single Numpy 2D array to and from a CSV file as a single command in Python?
[英]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 Image
和Image.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.