python-2.7 - AttributeError: 'NoneType' 对象没有使用 OpenCV 的属性 'shape'
问题描述
我正在从安装到谷歌 colab 的谷歌驱动器中读取图像。我有两个文件夹,一个带有阳性 covid-19 胸部 X 光片,另一个带有正常胸部 X 光片。我试图并排显示这些图像以进行比较。以下是代码和错误的图像:
这里也是写好的代码:
Cimages = ('/content/drive/My Drive/Data/Covid')
Nimages = ('/content/drive/My Drive/Data/Normal')
import skimage
from skimage.transform import resize
def plot(i):
normal = cv2.imread(dataset +'Normal//' + Nimages[i])
normal = skimage.transform.resize(normal, (150,150,3))
covid = cv2.imread(dataset +'Covid//' + Cimages[i])
covid = skimage.transform.resize(normal, (150,150,3), mode = reflect)
pair = np.concatenate((normal, covid), axis = 1)
print('Normal vs. Covid')
plt.figure(figsize=(10,5))
plt.imshow(pair)
plt.show()
for i in range(0,3):
plot(i)
这给了我一个错误:
AttributeError Traceback (most recent call last)
<ipython-input-52-237aff042641> in <module>()
1 for i in range(0,3):
----> 2 plot(i)
<ipython-input-50-85bb2e03725c> in plot(i)
3 def plot(i):
4 normal = cv2.imread(dataset +'Normal//' + Nimages[i])
----> 5 normal = skimage.transform.resize(normal, (150,150,3))
6 covid = cv2.imread(dataset +'Covid//' + Cimages[i])
7 covid = skimage.transform.resize(normal, (150,150,3), mode = reflect)
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py in resize(image, output_shape, order, mode, cval, clip, preserve_range, anti_aliasing, anti_aliasing_sigma)
89 output_shape = tuple(output_shape)
90 output_ndim = len(output_shape)
---> 91 input_shape = image.shape
92 if output_ndim > image.ndim:
93 # append dimensions to input_shape
AttributeError:“NoneType”对象没有属性“形状”
所以它似乎发生在 skimage.tranform.resize 代码行中。请帮忙。
解决方案
问题不在于功能
skimage.tranform.resize
但随着图像的阅读
normal = cv2.imread(dataset +'Normal//' + Nimages[i])
不确定您要在那里做什么,但Nimages[i]
不会给您文件夹中的第一个文件,但在您的情况下,它将产生字符串的第一个字符/
。然后您将发送dataset
变量 ++ Normal//
,/
这基本上是您的情况Normal///
,然后您将尝试读取该路径上的图像,但毫无疑问,在这种情况下没有图像opencv
将返回给您None
(基本上什么都没有)。然后你尝试调整大小None
,skimage
这将失败。
更好的选择是直接读取图像或在看起来像这样的循环中读取图像:
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(Nimages) if isfile(join(Nimages , f))]
for image_path in onlyfiles:
normal = cv2.imread(join(Nimages , image_path))
normal = skimage.transform.resize(normal, (150,150,3))
假设您提到的目录中只有图像。
推荐阅读
- python - LDA 主题没有变化
- mysql - GCP MySQL Cloud SQL 数据库无法正确导出多字节 UTF-8 字符
- css - 使用粘性位置时保留侧边栏的网格间隙
- sql-server - 如何使用 powershell 在 SQL Azure 中获取所有 Runbook 作业
- jquery - 使用 jquery 播放音频而无需循环
- typescript - mochaOpts 需要量角器配置中的文件
- javascript - 如何通过2个参数进行角度排序
- twilio-studio - 如何将信息发送到 Studio 中的 TWiml 重定向小部件以及如何使用 Liquid 变量输入法?
- ios - 在 Xcode 11 和 Swift 5 中更新 Carthage 时出错
- ios - SwiftUI:NavigationView 内 TabBar 内的 ListViews 生成空视图