Python 使用pylab.imshow()显示图像

Python 使用pylab.imshow()显示图像,python,matplotlib,imshow,Python,Matplotlib,Imshow,我对所有这些都比较陌生,我开始了关于图像分析的教程。尝试执行pylab.imshow(dna)步骤时,返回以下错误: In [10]: pylab.imshow(dna) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-

我对所有这些都比较陌生,我开始了关于图像分析的教程。尝试执行
pylab.imshow(dna)
步骤时,返回以下错误:

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
[10]中的
:pylab.imshow(dna)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1 pylab.imshow(dna)
/imshow中的usr/lib/pymodules/python2.7/matplotlib/pyplot.pyc(X,cmap,norm,aspect,interpolation,alpha,vmin,vmax,origin,extent,shape,filternorm,filterrad,imlim,重采样,url,hold,**kwargs)
2375斧头保持(保持)
2376请尝试:
->2377 ret=ax.imshow(X,cmap,norm,aspect,interpolation,alpha,vmin,vmax,origin,extent,shape,filternorm,filterrad,imlim,重采样,url,**kwargs)
2378 draw_if_interactive()
2379最后:
/imshow中的usr/lib/pymodules/python2.7/matplotlib/axes.pyc(self、X、cmap、norm、aspect、插值、alpha、vmin、vmax、原点、范围、形状、filternorm、filterrad、imlim、重采样、url、**kwargs)
6794 filterrad=filterrad,重采样=重采样,**kwargs)
6795
->6796 im.set_数据(X)
6797 im.set_α(α)
6798自我设置艺术家道具(im)
/set_数据中的usr/lib/pymodules/python2.7/matplotlib/image.pyc(self,A)
409如果(自身)不在(2,3)或
410(self.\A.ndim==3和self.\A.shape[-1]不在(3,4)):
-->411 raise TypeError(“图像数据的尺寸无效”)
412
413自.\u imcache=无
TypeError:图像数据的维度无效
我可以肯定的是,我已经完全按照教程中的所有说明进行了操作,但我无法确定是否出了问题


这正是图像在dna=mahotas.imread('dna.jpeg')类型(dna)中保存的内容,它给出numpy.ndarray和dna.shape(10241344,1)

这就是问题所在,如果您传递一个3D
ndarray
,它预计您将有3个或4个平面(RGB或RGBA)(读取堆栈跟踪最后一帧第410行的代码)

您只需要使用

dna = dna.squeeze()

要查看
挤压
正在执行的操作,请参见以下示例:

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

由于MxNx1大小的3d阵列现在被强制转换为MxN进行显示,因此此错误不再出现。

什么是
dna
?(什么是
type(dna)
dna.shape
给出的?)它引起了
TypeError
,因为它不是
imshow
知道如何处理的类型或形状。它只是图像保存在
dna=mahotas.imread('dna.jpeg')
type(dna)给出numpy.ndarray和
dna.shape
中的内容(1024, 1344, 1)
a = np.arange(25).reshape(5, 5, 1)
print a.shape # (5, 5, 1)
b = a.squeeze()
print b.shape # (5, 5)