使用cv2.resize后输出为None?遇imshow断言失败错误求助
OpenCV调整图像尺寸后imshow断言失败&resize返回None问题解决
我用以下Python代码尝试用cv2.resize调整图像尺寸并通过cv2.imshow显示,运行时触发断言失败错误,同时疑惑cv2.resize的输出为何是None。
代码:
import cv2 img = cv2.imread("data/sample.jpg") if img is not None: img1 = cv2.resize(img, (500, 500)) cv2.imshow("My demo", img1) else: print("Unable to load image")
错误信息(翻译后):
cv2.error: OpenCV(4.6.0) /Users/xperience/actions-runner/_work/opencv-python/opencv-python/opencv/modules/highgui/src/window.cpp:967: error: (-215:断言失败) size.width>0 && size.height>0 于函数 'imshow' 中
问题原因及解决办法
核心问题:断言失败说明
imshow接收的图像宽高至少有一个不大于0,而resize返回None的唯一可能是输入的原始图像本身异常——哪怕过了img is not None的判断,也可能是图像加载后尺寸无效(比如宽/高为0),或者图像文件损坏。具体排查与修复步骤:
- 检查原始图像尺寸:在调用
resize前打印图像的形状,确认输入是否有效:
如果输出的宽或高为0,说明图像文件损坏,更换正常图片测试。print(img.shape) # 正常输出应为(高度, 宽度, 通道数),例如(1080, 1920, 3) - 验证resize结果有效性:给调整后的图像加有效性判断,避免无效图像传入
imshow:img1 = cv2.resize(img, (500, 500)) if img1 is not None and img1.shape[0] > 0 and img1.shape[1] > 0: cv2.imshow("My demo", img1) cv2.waitKey(0) # 必须添加,否则窗口会瞬间关闭 cv2.destroyAllWindows() else: print("调整尺寸后的图像无效") - 补充imshow的必要操作:原代码缺少
cv2.waitKey(0)和cv2.destroyAllWindows(),这两个函数是保证窗口正常显示的关键——不加waitKey窗口会立刻关闭,甚至触发异常。 - 确认图像路径正确性:虽然
img is not None,但可以改用绝对路径排查相对路径的工作目录问题:import os img_path = os.path.abspath("data/sample.jpg") print(img_path) # 打印绝对路径,确认文件确实存在 img = cv2.imread(img_path)
- 检查原始图像尺寸:在调用
内容的提问来源于stack exchange,提问作者San05KITS
相关产品推荐
相关产品推荐

