You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenCV进行图像缩放时触发cv::resize函数(-215:Assertion failed) inv_scale_x > 0错误的求助

解决OpenCV resize时出现的inv_scale_x > 0断言错误

让我来帮你排查并解决这个问题,先拆解一下你遇到的错误和代码里的问题:

错误信息(-215:断言失败) inv_scale_x > 0本质上是说OpenCV在执行resize操作时,计算出的缩放比例不合法——要么是目标图像的宽度≤0,要么是源图像根本没加载成功导致宽度为0。我们一步步来解决:

1. 先确认图像是否成功加载

你的代码里用了cv2.imread(r"C:\Users\User\Documents\sypder\try\bird.jpg", cv2.IMREAD_UNCHANGED),首先要检查这个路径是否正确:

  • 注意路径里的sypder是不是拼写错误?常用的Python IDE是Spyder,可能你这里打错了字母?
  • 可以在读取图像后加一行判断代码,快速验证是否加载成功:
    if img is None:
        print("无法加载图像,请检查路径是否正确!")
        exit()
    

如果运行后打印了这句话,说明路径有问题,修正路径即可。

2. 修正尺寸计算的逻辑错误

你的代码里计算width和height的时候犯了一个小失误:

width = int(img.shape[0] * scale_percentage/100)
height = int(img.shape[0] * scale_percentage/100)

在OpenCV中,img.shape返回的格式是(高度, 宽度, 通道数)(彩色图的情况):

  • img.shape[0]对应的是图像的高度
  • img.shape[1]才是图像的宽度
    你把width和height都用高度来计算,不仅会导致图像比例完全失真,还可能在极端情况下触发缩放比例的断言错误。正确的写法应该是:
width = int(img.shape[1] * scale_percentage / 100)
height = int(img.shape[0] * scale_percentage / 100)

修正后的完整代码

把上面的问题都修复后,完整的可运行代码如下:

import numpy as np
import cv2

img = cv2.imread(r"C:\Users\User\Documents\spyder\try\bird.jpg", cv2.IMREAD_UNCHANGED)

# 检查图像是否成功加载
if img is None:
    print("无法加载图像,请检查路径是否正确!")
    exit()

print('Original Dimension:', img.shape)

scale_percentage = 30
width = int(img.shape[1] * scale_percentage / 100)
height = int(img.shape[0] * scale_percentage / 100)
dim = (width, height)

resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized image dimension:', resized.shape)

cv2.imwrite('resized.jpg', resized)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()  # 加上这句可以正常释放窗口资源,避免程序残留

内容的提问来源于stack exchange,提问作者lala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:02:35