Python中cv2.resize与np.sum报错问题求助
问题分析与解决方案
核心原因
所有错误的根源是**cv2.imread未成功读取到图片,返回了None**,导致后续数组操作全部失效:
cv2.resize报错是因为传入的src是None,不是有效的图像数组;AxisError是因为None转成numpy数组后是0维的,无法对axis=2执行求和操作。
解决步骤
修复图片路径
Windows路径中的反斜杠\是转义字符(比如\U会被解析为Unicode转义),必须做以下处理之一:- 使用原始字符串:在路径前加
r,示例:r'C:\Users\WaWa\Jupyter-Demo\images\hexagon.jpg' - 转义反斜杠:把
\改成\\,示例:'C:\\Users\\WaWa\\Jupyter-Demo\\images\\hexagon.jpg' - 改用正斜杠:把
\改成/,示例:'C:/Users/WaWa/Jupyter-Demo/images/hexagon.jpg'
- 使用原始字符串:在路径前加
添加读取验证
读取图片后立即检查是否成功,避免后续无效操作:
import cv2 import numpy as np import pint u = pint.UnitRegistry() # 修复后的路径 img_path = r'C:\Users\WaWa\Jupyter-Demo\images\hexagon.jpg' img = cv2.imread(img_path) # 验证读取结果 if img is None: raise ValueError(f"无法读取图片,请检查路径:{img_path}") # 后续正常操作 img = np.pad(img, 200, mode='constant') img = cv2.resize(img, dsize=(1600, 1600), interpolation=cv2.INTER_CUBIC) U0 = np.array(img).sum(axis=2).astype(float) lam1 = 400*u.nm lam2 = 500*u.nm lam3 = 600*u.nm lam4 = 700*u.nm x = np.linspace(-2,2,U0.shape[0]) * u.mm xv, yv = np.meshgrid(x, x) # 执行自定义计算函数 U_new1 = compute_U(U0, xv, yv, lam=lam1, z=6*u.cm) U_new2 = compute_U(U0, xv, yv, lam=lam2, z=6*u.cm) U_new3 = compute_U(U0, xv, yv, lam=lam3, z=6*u.cm) U_new4 = compute_U(U0, xv, yv, lam=lam4, z=6*u.cm)
- 额外排查点
- 确认图片文件确实存在于指定路径,文件名(包括大小写)完全匹配;
- 检查当前程序是否有读取该文件的权限;
- 确认图片格式为OpenCV支持的类型(如jpg、png等)。
内容的提问来源于stack exchange,提问作者user22058539
相关产品推荐
相关产品推荐

