2016-04-06 21 views
2

piksel bir matris dönüştürme Ben, bu birinci piksel kırmızı bir 2D görüntü olduğu anlamına gelir aşağıdaki biçimde piksel (B, G, R,)bir görüntü piton

M = [ 
    [(0, 0, 255), (0, 255, 0)], 
    [(255, 0, 0), (0, 0, 0)] 
] 

ile ilgili veriler, ikinci yeşil, üçüncü mavi ve sonuncusu siyah. Açıkçası orijinal resmim oldukça büyük, yani 2x2 sadece bir örnektir. Temelde:

from matplotlib import pyplot as plt 
plt.imshow(np.array(M), interpolation='none') 
plt.show() 

ama bu bana kesinlikle boş (siyah) ekran verir:

red, blue 
green, black 

ben bir görüntü olarak bu verileri temsil etmek istiyorum. Güzel bir 2x2 piksel görüntü elde etmek için kolay bir yol var mı? istenen rengi temsil etmelidir RGB dizinin

cevap

4

Görüntüyü normalize edilmiş şamandıralara dönüştürmek zorunda değilsiniz. Doğru biçimde (MxNx3) ve doğru aralıkta (0-255) var, ancak np.uint8 türünde olmalıdır. documentation

X kaynaktan: array_like, şekil (n, m) veya (n, m, 3) ya da (n, m, 4)

görüntü akımı eksenlerine X görüntüsü. X, bir float dizisi, bir uint8 dizisi veya bir PIL görüntüsü olabilir. (Gri tonlama yalnızca bir dizi yüzen) parlaklık
MxNx3 - -

MxN RGB (float veya uint8 dizi)
MxNx4 - RGBA (float veya uint8 dizi)

: X, bir dizi ise, aşağıdaki şekillere sahip olabilir Eğer RGB biçimine getirmek için üçüncü boyutu ters gerekir böylece

Ancak, dizi veri, BGR formatında.

image = np.array(M, dtype=np.uint8)[...,::-1] 

Dikkatimi çeken başka bir özellik de verilerin tanımlanmasıdır. Listeler listesi ilk satırları temsil eder, bu nedenle M aslında ilk satırda kırmızı/yeşil ve ikinci mavi/siyah var. Pikselleri kırmızı, mavi ve yeşil/siyah olarak belirttiğiniz sırayla istiyorsanız, satırları sütunlarla aktarmanız gerekir.

image_transp = np.transpose(image, (1, 0, 2)) 

Şimdi doğru bir ( image veya image_transp) hangisi görüntü gösterimi belirleyebiliriz.İkincisinin için, almak

plt.imshow(image_transp, interpolation='none') 

enter image description here

4

değerleri; En kolay [1, 0] yüzen için RGB değerlerini dönüştürmek için belki de: Dört renk, bir NxMx3 dizi np.array(M).shape = (2, 2, 3) tanımlandığı

import numpy 
import matplotlib.pyplot as plt 
randim_image1 = numpy.asarray([[(0., 0., 1.), (0., 1., 0.)], [(1., 0., 0.), (0., 0., 0.)]]) 

plt.imshow(image1, interpolation="none") 

enter image description here