首页 文章

Python OpenCV错误:“TypeError:图像数据无法转换为float”

提问于
浏览
3

所以我试图创建一个Python程序,使用Python的OpenCV检测两个图像中的类似细节 . 我有两个图像,它们在我当前的目录中,它们存在(参见第6-17行中的代码) . 但是当我尝试运行它时,我收到以下错误 .

import numpy as np
import matplotlib.pyplot as plt
import cv2
import os

path1 = "WIN_20171207_13_51_33_Pro.jpg"
path2 = "WIN_20171207_13_51_43_Pro.jpg"

if os.path.isfile(path1):
    img1 = cv2.imread('WIN_20171207_13_51_33_Pro.jpeg',0)
else:
    print ("The file " + path1 + " does not exist.")

if os.path.isfile(path2):
    img2 = cv2.imread('WIN_20171207_13_51_43_Pro.jpeg',0)
else:
    print ("The file " + path2 + " does not exist.")

orb = cv2.ORB_create()

kpl1, des1 = orb.detectAndCompute(img1,None)
kpl2, des2 = orb.detectAndCompute(img2,None)

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x:x.distance)

img3 = cv2.drawMatches(img1,kpl1,img2,kpl2,matches[:10],None, flags=2)

plt.imshow (img3)
plt.show()

这是我一直在犯的错误......

Traceback (most recent call last):


File "C:\Users\jweir\source\repos\BruteForceFeatureDetection\BruteForceFeatureDetection\BruteForceFeatureDetection.py", line 31, in <module>
    plt.imshow (img3)
  File "C:\Program Files\Python36\lib\site-packages\matplotlib\pyplot.py", line 3080, in imshow
    **kwargs)
  File "C:\Program Files\Python36\lib\site-packages\matplotlib\__init__.py", line 1710, in inner
    return func(ax, *args, **kwargs)
  File "C:\Program Files\Python36\lib\site-packages\matplotlib\axes\_axes.py", line 5194, in imshow
    im.set_data(X)
  File "C:\Program Files\Python36\lib\site-packages\matplotlib\image.py", line 600, in set_data
    raise TypeError("Image data cannot be converted to float")
TypeError: Image data cannot be converted to float

有人可以向我展示为什么我会收到此错误,它意味着什么,以及如何解决它 .

1 回答

  • 9

    你实际上并没有在图像中阅读 .

    看看如果你试图在matplotlib中显示 None 会发生什么:

    plt.imshow(None)
    

    追溯(最近一次呼叫最后):

    在<module>中的文件“... / example.py”,第16行
    plt.imshow(无)
    在imshow中输入“... / matplotlib / pyplot.py”,第3157行
    ** kwargs)
    文件“... / matplotlib / __ init__.py”,第1898行,内部
    return func(ax,* args,** kwargs)
    在imshow中输入文件“... / matplotlib / axes / _axes.py”,第5124行
    im.set_data(X)
    在set_data中输入“... / matplotlib / image.py”,第596行
    引发TypeError(“图像数据无法转换为浮动”)

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

    您正在阅读 WIN_20171207_13_51_33_Pro.jpeg 但是您正在检查 WIN_20171207_13_51_33_Pro.jpg 是否存在 . 请注意不同的扩展名 . 为什么你有两次(和不同的)文件名?只需简单地写:

    if os.path.isfile(path1):
        img1 = cv2.imread(path1, 0)
    else:
        print ("The file " + path1 + " does not exist.")
    

    请注意,即使您将伪造的文件放入 cv2.imread() ,生成的图像也只是 None ,在matplotlib尝试绘制它之前,它在任何后续函数调用中都不会出错 . 如果您在阅读后 print(img1) ,则'll see it' s None 并且无法正常阅读 .

相关问题