读取图时候一直显示这个错误

(h, w) = img.shape

AttributeError: 'NoneType' object has no attribute 'shape'

img

咋回事啊

img传进来是个None

这个错误通常发生在你试图访问一个空对象的属性时。具体来说,"NoneType" 表示该对象是空的,因此无法访问相关的属性或方法。

在你的情况下,你尝试访问某个对象的 "shape" 属性,但该对象实际上是一个空对象(即 NoneType),因此出现了 "NoneType" object has no attribute 'shape' 的错误。要解决这个错误,你需要先确保你正在处理的对象不是空对象。通常,你应该检查代码中创建、初始化和传递对象的过程,以确认这些对象都被正确地定义和传递。

例如,在使用 NumPy 数组时,如果你将某个数组初始化为 None 对象并尝试读取其 shape 属性,就会出现此错误。正确的做法是初始化一个真正的数组对象并用数据填充它,然后才能访问其形状属性。

如果你仍然遇到问题,请尝试输出对象本身的值,以了解为什么它是空对象。你也可以阅读出错行之前的代码,查看是否有其他操作可能导致对象为空。

帮你改造了下:

import cv2
import numpy as np

# 2023年6月8日11:47:34
def preprocess(img):
    assert isinstance(img, np.ndarray), 'Image is not a numpy array'
    # 判断图像维度,转换为2维图像
    if len(img.shape) > 2:
        img = img[:, :, 0]
    h = img.shape[0]
    w = img.shape[1]

    # 64*256全白圈
    final_img = np.ones([64, 256]) * 255

    # 图片大于256宽度,裁剪到256
    if w > 256:
        img = img[:, :256]

        # 图片大于64高度,裁剪到64
    if h > 64:
        img = img[:64, :]

    # 将裁剪后的图片贴在全白圈中间
    final_img[:h, :w] = img

    # 旋转90度
    return cv2.rotate(final_img, cv2.ROTATE_90_CLOCKWISE)


def read_image():
    img = cv2.imread('test.jpg')
    return img


if __name__ == '__main__':
    # 读取图片,可能返回None
    img = read_image()
    if img is not None:
        img = preprocess(img)
        # 显示结果
    cv2.imshow('result', img)
    cv2.waitKey(0)