使用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
相关产品推荐
相关产品推荐

