AttributeError: 'NoneType'对象无'min'属性,skimage添加高斯噪声报错如何修复
错误解决方案
报错核心触发逻辑是random_noise函数接收的输入参数为空值/不符合格式要求,对应解决方法如下:
- 第一类原因(最高发):图像读取失败,传入的
I为Nonecv2.imread接口读取不存在路径、文件名错误、格式损坏的图像时不会主动抛出异常,只会返回None值,传入random_noise后调用min方法就会触发本次报错。
解决方法:- 确认
roses.jpg文件存放在当前Python脚本的运行工作目录下,也可以直接写图像的绝对路径避免路径匹配错误 - 新增图像读取成功校验逻辑,修正后的读取代码如下:
I = cv2.imread('roses.jpg', 0) # 新增校验 if I is None: print("图像读取失败,请检查文件路径") exit() - 确认
- 第二类原因:输入图像为带符号类型,不符合
random_noise的入参要求
排除读取失败问题后如果仍报错,说明读入的图像格式是带符号的数值类型,random_noise要求输入为值域[0,255]的无符号8位整型,或归一化到[0,1]的浮点型,新增类型转换逻辑即可:# 转无符号uint8格式 I = I.astype('uint8') # 或归一化到0-1浮点区间 # I = I / 255.0
另外原代码还存在两处隐性错误:
- 绘图时调用的
plt.imshow(img)中img变量未定义,你前面定义的图像变量是I,需要同步修改 - matplotlib默认用伪彩色映射显示单通道灰度图,需要指定
cmap='gray'才能正常显示灰度效果
修正后完整可运行代码
import cv2 from matplotlib import pyplot as plt from skimage.util import random_noise # 读取图像+校验 I = cv2.imread('roses.jpg', 0) if I is None: print("图像读取失败,请检查文件路径") exit() # 可选:格式转换 I = I.astype('uint8') # 添加高斯噪声 gauss = random_noise(I, mode='gaussian', seed=None, clip=True) # 绘图 plt.subplot(241), plt.imshow(I, cmap='gray'), plt.title('origin') plt.subplot(242), plt.imshow(gauss, cmap='gray'), plt.title('gaussian') plt.show()
内容的提问来源于stack exchange,提问作者Бямбадорж
相关产品推荐
相关产品推荐

