Python OpenCV 错误:"TypeError: Image data cannot be converted to float"



因此,我正在尝试创建一个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:UsersjweirsourcereposBruteForceFeatureDetectionBruteForceFeatureDetectionBruteForceFeatureDetection.py", line 31, in <module>
    plt.imshow (img3)
  File "C:Program FilesPython36libsite-packagesmatplotlibpyplot.py", line 3080, in imshow
    **kwargs)
  File "C:Program FilesPython36libsite-packagesmatplotlib__init__.py", line 1710, in inner
    return func(ax, *args, **kwargs)
  File "C:Program FilesPython36libsite-packagesmatplotlibaxes_axes.py", line 5194, in imshow
    im.set_data(X)
  File "C:Program FilesPython36libsite-packagesmatplotlibimage.py", line 600, in set_data
    raise TypeError("Image data cannot be converted to float")
TypeError: Image data cannot be converted to float

有人可以向我兴起我为什么我会遇到这个错误,含义以及如何解决。

您实际上并未在图像中阅读。

查看如果您尝试在matplotlib中显示 None会发生什么:

plt.imshow(None)
Traceback (most recent call last):  
 File ".../example.py", line 16, in <module>  
   plt.imshow(None)  
 File ".../matplotlib/pyplot.py", line 3157, in imshow  
   **kwargs)  
 File ".../matplotlib/__init__.py", line 1898, in inner  
   return func(ax, *args, **kwargs)  
 File ".../matplotlib/axes/_axes.py", line 5124, in imshow  
   im.set_data(X)  
 File ".../matplotlib/image.py", line 596, in set_data  
   raise TypeError("Image data can not convert to float")  
TypeError: Image data can not convert to 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),您会看到它是None并且无法正确阅读。

我不知道它是否与您的案例相关,但是由于我们在字符串类型中分配了 cv2.imread("filepathHere")中的文件路径,如果是' b&quot的参数,或" r&quot"发生在文件路径中,导致程序引起这样的错误。

当我以前遇到这样的错误时,我将文件名从file/brick.png更改为ibrick.png,并且问题已解决。

相关内容

最新更新