Python 缩放并保存图像(AttributeError:';非类型';对象没有属性';形状';)

Python 缩放并保存图像(AttributeError:';非类型';对象没有属性';形状';),python,opencv,image-processing,scale,attributeerror,Python,Opencv,Image Processing,Scale,Attributeerror,我正在尝试缩放并将一千个图像保存到一个目录中 我成功地调整了图像的大小。但是,保存时会发生错误 代码如下。请帮帮我 import cv2 import numpy as np import os def scaling_shirink(addr): img = cv2.imread(addr) height, width = img.shape[:2] shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolatio

我正在尝试缩放并将一千个图像保存到一个目录中

我成功地调整了图像的大小。但是,保存时会发生错误

代码如下。请帮帮我

import cv2
import numpy as np
import os

def scaling_shirink(addr):
    img = cv2.imread(addr)
    height, width = img.shape[:2]
    shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    cv2.imshow('Shrink', shrink)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

count = 0
IMAGE_DIR_BASE = 'C:/ClassShared\Data/CM_ML_IMG_181011/CASE_01/FPS_10_PNG'
image_file_list = os.listdir(IMAGE_DIR_BASE)
for file_name in image_file_list:
    image = scaling_shirink(IMAGE_DIR_BASE + '/' + file_name)
    cv2.imwrite('C:/ClassShared\Data/CM_ML_IMG_181011/CASE_01/34_sdetect_db1/' + '_' + "%04d" % (count) + '.png', image)
    count = count + 1
错误消息如下所示

Traceback (most recent call last):
  File "C:/PycharmProjects/TS_S/Scailing.py", line 19, in <module>
    image = scaling_shirink(IMAGE_DIR_BASE + '/' + file_name)
  File "C:/PycharmProjects/TS_S/Scailing.py", line 8, in scaling_shirink
    height, width = img.shape[:2]
AttributeError: 'NoneType' object has no attribute 'shape'
回溯(最近一次呼叫最后一次):
文件“C:/PycharmProjects/TS_S/Scailing.py”,第19行,在
image=scaling\u shirink(image\u DIR\u BASE+'/'+文件名)
文件“C:/PycharmProjects/TS_S/Scailing.py”,第8行,在scaling\u shirink中
高度、宽度=img.形状[:2]
AttributeError:“非类型”对象没有属性“形状”
我不明白它为什么说 AttributeError:“非类型”对象没有属性“形状”

编辑:

检查图像路径是否正确,以及它是否实际上是具有Opencv接受的格式的图像。因为如果路径错误,
img=cv2.imread(addr)
将返回
None
并且
高度、宽度=img.shape[:2]
将抛出错误

此外,您的函数scaling_shirink()将返回None。 要修复它,只需将其更改为以下函数:

def scaling_shirink(addr):
    img = cv2.imread(addr)
    height, width = img.shape[:2]
    shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    cv2.imshow('Shrink', shrink)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #this return was missing
    return shrink 

那应该行

cv2.imread(addr)
返回
None
。您确定
addr
正确吗?该目录中是否有任何非图像文件?请确保其正确,如果我在没有for语句的情况下运行,则运行良好。上面的代码有点错误,scaling_shirink函数的返回值为shirink。如果错误,请修复它。如果你不给我们看真正的代码,我们就无能为力。我解决了这个问题,哈哈,这很简单!thx回答John:)这不是导致错误的问题(尽管这是OP的另一个问题)
img.shape
return
语句发生之前抛出错误,因为
imread()
函数正在返回
None
@AlexanderReynolds您是对的!尽管函数中缺少返回也是一个问题。谢谢你的提示