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

So I am trying to create a Python Program to detect similar details in two images using Python's OpenCV. I have the two images and they are in my current directory, and they exist (see the code in lines 6-17). But I am getting the following error when I try running it.

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()

Here is the error I keep on getting...

Traceback (most recent call last):

File "C:\Users\jweir\source\repos\BruteForceFeatureDetection\BruteForceFeatureDetection\BruteForceFeatureDetection.py", line 31, in

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

Can someone please explpain to me why I am getting this error, what it means, and how to fix it.

解决方案

You're not actually reading in an image.

Check out what happens if you try to display None in matplotlib:

plt.imshow(None)

Traceback (most recent call last):

File ".../example.py", line 16, in

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

You're reading WIN_20171207_13_51_33_Pro.jpeg but you're checking if WIN_20171207_13_51_33_Pro.jpg exists. Note the different extensions. Why do you have the filename written twice (and differently)? Just simply write:

if os.path.isfile(path1):

img1 = cv2.imread(path1, 0)

else:

print ("The file " + path1 + " does not exist.")

Note that even if you put a bogus file into cv2.imread(), the resulting image will just be None, which doesn't error in any of the subsequent function calls until matplotlib tries to draw it. If you print(img1) after reading, you'll see it's None and not reading properly.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值