TypeError:图像数据无法转换为float

时间:2015-08-30 23:31:14

标签: python image image-processing python-imaging-library

我想创建一个16位图像。所以我写了一个代码。

     import skimage 
     import random
     from random import randint                        
     xrow=raw_input("Enter the number of rows to be present in image.=>")
     row=int(xrow)
     ycolumn=raw_input("Enter the number of columns to be present in image.=>")
     column=int(ycolumn)

       A={}
       for x in xrange(1,row):
           for y in xrange(1,column):
               a=randint(0,65535)
               A[x,y]=a 

       imshow(A)

但每当我运行此代码时,我都会收到错误,显示“TypeError:图像数据无法转换为浮动”。是否有任何解决方案。

我为我的写作中的错误道歉,因为这是我上面提到的第一个问题。

14 个答案:

答案 0 :(得分:17)

这个问题首先出现在谷歌搜索此类型错误中,但没有关于错误原因的一般答案。海报的独特问题是使用不适当的对象类型作为plt.imshow()的主要参数。更一般的答案是plt.imshow()需要一系列浮点数,如果你没有指定float,numpy,pandas或其他任何东西,可能会在某个地方推断出不同的数据类型。您可以通过为float参数指定dtype作为对象的构造函数来避免这种情况。

请参阅Numpy documentation here

请参阅Pandas documentation here

答案 1 :(得分:13)

当我尝试绘制一个imagePath而不是图像本身时,这发生在我身上。解决方法是加载图像并绘制图像。

答案 2 :(得分:3)

我也遇到了这个错误,上面给出的答案说我们应该先上传它们,然后使用它们的名称而不是路径-但是对于Kaggle数据集,这是不可能的。

因此,我想出的解决方案是以mpimg格式循环读取单个图像。在这里,我们可以使用路径,而不仅仅是图像名称。

我希望它能对你们有所帮助。

import matplotlib.image as mpimg
for img in os.listdir("/content/train"): 
  image = mpimg.imread(path)
  plt.imshow(image)
  plt.show()

答案 3 :(得分:2)

根据我对scikit-image文档(http://scikit-image.org/docs/dev/index.html)的理解,imshow()将 ndarray 作为参数,而不是字典:

http://scikit-image.org/docs/dev/api/skimage.io.html?highlight=imshow#skimage.io.imshow

也许如果你发布整个堆栈跟踪,我们可以看到TypeError来自imshow()的深处。

答案 4 :(得分:2)

试试这个

>>> plt.imshow(im.reshape(im.shape[0], im.shape[1]), cmap=plt.cm.Greys)

答案 5 :(得分:2)

当我不知道尝试绘制图像路径而不是图像时发生了错误。

我的代码:

import cv2 as cv
from matplotlib import pyplot as plt
import pytesseract
from resizeimage import resizeimage

img = cv.imread("D:\TemplateMatch\\fitting.png") ------>"THIS IS THE WRONG USAGE"
#cv.rectangle(img,(29,2496),(604,2992),(255,0,0),5)
plt.imshow(img)

更正: img = cv.imread("fitting.png") --->这是正确的用法”

答案 6 :(得分:1)

尝试

import skimage
import random
from random import randint
import numpy as np
import matplotlib.pyplot as plt


xrow = raw_input("Enter the number of rows to be present in image.=>")
row = int(xrow)
ycolumn = raw_input("Enter the number of columns to be present in image.=>")
column = int(ycolumn)

A = np.zeros((row,column))
for x in xrange(1, row):
    for y in xrange(1, column):
        a = randint(0, 65535)
        A[x, y] = a

plt.imshow(A)
plt.show()

答案 7 :(得分:1)

我想您可能在Pycharm中遇到了这个问题。如果是这样,您可以尝试解决此问题。

转到Pycharm中的File-Setting-Tools-Python Scientific,然后删除Show plots in tool window的选项。

答案 8 :(得分:1)

在我的情况下,image path是错误的!因此,首先,您可能要检查图像路径是否正确:)

答案 9 :(得分:1)

首先将图像读取为数组

image = plt.imread(//image_path)
plt.imshow(image)

答案 10 :(得分:0)

尝试使用它,

   plt.imshow(numpy.real(A))
   plt.show()

代替plt.imshow(A)

答案 11 :(得分:0)

关于cv2。

  1. cv2.imread()期间,您可能未提供正确的文件类型。 例如jpg而不是png。
  2. 或者您提供的是图片路径 图像数组。例如plt.imshow(img_path)

先尝试cv2.imread(img_path),然后再尝试plt.imshow(img)cv2.imshow(img)

答案 12 :(得分:0)

问题是我的数组是 u3 类型,我将它更改为 float 并且它对我有用。 我有一个带有图像列的数据框,其中包含图像/图片数据。重塑部分取决于人与人之间的关系,他们处理的图像大小为 9126,因此为 96*96。

a = np.array(df_train.iloc[0].Image.split(),dtype='float')
a = a.reshape(96,96)
plt.imshow(a)

答案 13 :(得分:0)

输入应该是数组

plt.imshow(plt.imread('image_path'))