(h, w) = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'
咋回事啊
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)