2013-02-21 14 views
8

Jestem względnie nowy w tym wszystkim i zacząłem robić samouczek dotyczący analizy obrazu tutaj: http://www.pythonvision.org/basic-tutorial Mam zainstalowane wszystkie moduły, ale nie dostałem bardzo daleko przed uderzeniem szkopuł. gdy próbuje wykonać krok pylab.imshow(dna) to zwraca następujący błąd:Pokazywanie obrazu za pomocą pylab.imshow()

In [10]: pylab.imshow(dna) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-10-fc86cadb4e46> in <module>() 
----> 1 pylab.imshow(dna) 

/usr/lib/pymodules/python2.7/matplotlib/pyplot.pyc in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, hold, **kwargs) 
    2375   ax.hold(hold) 
    2376  try: 
-> 2377   ret = ax.imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs) 
    2378   draw_if_interactive() 
    2379  finally: 

/usr/lib/pymodules/python2.7/matplotlib/axes.pyc in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs) 
    6794      filterrad=filterrad, resample=resample, **kwargs) 
    6795 
-> 6796   im.set_data(X) 
    6797   im.set_alpha(alpha) 
    6798   self._set_artist_props(im) 

/usr/lib/pymodules/python2.7/matplotlib/image.pyc in set_data(self, A) 
    409   if (self._A.ndim not in (2, 3) or 
    410    (self._A.ndim == 3 and self._A.shape[-1] not in (3, 4))): 
--> 411    raise TypeError("Invalid dimensions for image data") 
    412 
    413   self._imcache =None 

TypeError: Invalid dimensions for image data 

Dość pewne Śledzę wszystkie instrukcje zawarte w poradniku na pismo, ale nie można było wypracować idzie źle

Dzięki

+1

co jest 'dna'? (co daje "type (dna)" i "dna.shape"?) Podnosi "TypeError", ponieważ nie jest to typ lub kształt, z którym 'imshow' wie jak sobie poradzić. – tacaswell

+0

To właśnie obraz jest zapisywany jak w 'dna = mahotas.imread ('dna.jpeg')' 'type (dna)' daje numpy.ndarray i 'dna.shape' daje (1024, 1344, 1) –

Odpowiedz

23

"to jest po prostu to, co obraz jest zapisywany jako DNA = mahotas.imread ('dna.jpeg') typ (DNA) daje numpy.ndarray i dna.shape daje (1024, 1344, 1)"

To jest problem, jeśli y przekazujesz 3D ndarray, spodziewasz się, że będziesz miał 3 lub 4 płaszczyzny (RGB lub RGBA). (Przeczytaj kod na linii 410 w ostatniej ramce zapisu stosu).

Trzeba tylko pozbyć się dodatkowego wymiaru przy użyciu

dna = dna.squeeze() 

lub

imshow(dna.squeeze()) 

Aby zobaczyć, co squeeze robi, patrz poniższy przykład:

a = np.arange(25).reshape(5, 5, 1) 
print a.shape # (5, 5, 1) 
b = a.squeeze() 
print b.shape # (5, 5) 
Powiązane problemy