Showing an image with pylab.imshow()

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

I'm relatively new to all this and I started to do the tutorial on image analysis here: http://www.pythonvision.org/basic-tutorial I have installed all the modules but I didn't get very far before hitting a snag. when trying to perform the pylab.imshow(dna) step it returns the following error:

In [10]: pylab.imshow(dna) --------------------------------------------------------------------------- TypeError                                 Traceback (most recent call last)  in () ----> 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 

Fairly certain I have followed all the instructions in the tutorial to the letter but I can't work out was is going wrong

Thanks

回答1:

"it's just what the image is saved as in dna = mahotas.imread('dna.jpeg') type(dna) gives numpy.ndarray and dna.shape gives (1024, 1344, 1) "

This is the problem, if you hand in a 3D ndarray, it expects that you will have 3 or 4 planes (RGB or RGBA). (Read the code on line 410 in the last frame of the stack trace).

You just need to get rid of the extra dimension using

dna = dna.squeeze() 

or

imshow(dna.squeeze()) 

To see what squeeze is doing, see the following example:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!