You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenCV新手使用cv2.resize遇SystemError:参数非元组格式问题求助

解决cv2.resize报错SystemError的问题

Hey there! 作为OpenCV新手遇到这个问题很正常,我帮你分析下这个错误的常见原因和解决办法:

错误核心原因

这个SystemError: new style getargs format but argument is not a tuple错误,绝大多数情况下是因为你给cv2.resize()传递的尺寸参数格式不对。OpenCV的resize函数对第二个参数dsize有严格要求——必须是**(宽度, 高度)**的元组,不能是单个数值、列表或者其他格式。

常见问题场景&修复方案

1. 错误传递尺寸参数

比如你可能写成了这样(错误示例):

# 错误:把尺寸拆成两个单独参数,或者传了列表
resized_img = cv2.resize(img_np, 28, 28)
# 或者
resized_img = cv2.resize(img_np, [28, 28])

正确的写法应该是把尺寸打包成元组:

# 正确:dsize是(宽度, 高度)的元组
resized_img = cv2.resize(img_np, (28, 28))

2. 确认PIL转numpy数组的正确性

np.array(pil_image_rgb)转换PIL图像到numpy数组本身是没问题的,转出来的数组形状应该是(H, W, 3)(高度、宽度、通道数),你可以先打印下数组形状确认:

img_np = np.array(pil_image_rgb)
print(img_np.shape)  # 应该输出类似(xxx, xxx, 3)的结果

如果形状异常(比如通道数不对、是单通道图像),可能需要先把PIL图像转为RGB格式:

pil_image_rgb = Image.open("your_image_path").convert("RGB")

完整可运行示例代码

这里给你一个完整的流程示例,确保每一步都正确:

from PIL import Image
import cv2
import numpy as np

# 1. 读取图像并转为RGB格式
pil_img = Image.open("test_image.jpg").convert("RGB")
# 2. 转换为numpy数组
img_array = np.array(pil_img)
# 3. 正确调用cv2.resize,尺寸用元组(28,28)
resized_img = cv2.resize(img_array, (28, 28))
# 4. 验证结果形状
print("调整后图像形状:", resized_img.shape)  # 应该输出(28, 28, 3)

按照这个步骤走,应该就能解决你遇到的错误了。如果还有问题,可以检查下自己代码中cv2.resize的参数传递细节,或者确认输入图像的格式是否正常。

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

火山引擎 最新活动