使用skimage.io绘图时的KeyError

时间:2017-06-19 13:09:20

标签: python numpy scikit-image

我很抱歉标题不是很具描述性,但我的问题很奇怪,至少对我而言。

image = skiio.imread("picture.png")
greyValues = []
for i in xrange(len(image)):
    greyValues.append(np.uint32(image[i][xPos]))
skimage.io.imsave("image.png",np.transpose(greyValues))

现在这个工作正常,但我想计算沿y轴的三个柱的平均值:

image = skiio.imread("picture.png")
greyValues = []
for i in xrange(len(image)):
    greyValues.append(np.uint32((np.uint32(data[i][xPos])+np.uint32(data[i][xPos-1])+np.uint32(data[i][xPos+1]))/np.uint32(3)))
skimage.io.imsave("image.png",np.transpose(greyValues))

所以我收到了这个错误:

  

文件" C:\ Anaconda2_x64 \ lib \ site-packages \ skimage \ util \ dtype.py",第43行,在dtype_limits中       imin,imax = dtype_range [image.dtype.type]

KeyError:<输入' numpy.uint32'>

在GreyValues中,RGB值保存为例如:[255,255,255] 起初我以为我有不同的类型,因为我除以3所以我确保将所有内容都转换为numpy.uint32,这可能有点不必要,但这并没有解决问题,现在我有点无能为力我做错了。

我再次检查是100%确定:

for j in xrange(len(greyValues)):
    if(greyValues[j][0].dtype!='uint32'):
        print j,type(greyValues[j])

哪个没有输出

非常感谢帮助

修改

我深入研究了它,我注意到KeyError发生在这里:

import numpy as np
dtype_range = {np.bool_: (False, True),
           np.bool8: (False, True),
           np.uint8: (0, 255),
           np.uint16: (0, 65535),
           np.int8: (-128, 127),
           np.int16: (-32768, 32767),
           np.int64: (-2**63, 2**63 - 1),
           np.uint64: (0, 2**64 - 1),
           np.int32: (-2**31, 2**31 - 1),
           np.uint32: (0, 2**32 - 1),
           np.float32: (-1, 1),
           np.float64: (-1, 1)}

def dtype_limits(image, clip_negative=True):
    """Return intensity limits, i.e. (min, max) tuple, of the image's dtype.

    Parameters
    ----------
    image : ndarray
        Input image.
    clip_negative : bool
        If True, clip the negative range (i.e. return 0 for min intensity)
        even if the image dtype allows negative values.
    """
    imin, imax = dtype_range[image.dtype.type]
    if clip_negative:
        imin = 0
    return imin, imax`

现在当我查看我的数据时,我使用np.transpose(GreyValues).dtype.type我得到了确切的错误,

所以我做dtype_range[numpy.uint32] Spyder说

NameError: name 'numpy' is not defined

问题是np.uint32而不是numpy.uint32? 但为什么它首先起作用? 我怎么能绕过它呢?我应该删除导入并将其声明为numpy而不是np?

0 个答案:

没有答案