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

OpenCV使用resize()报only integer scalar arrays错误求助

OpenCV resize调用TypeError报错问题排查

核心错误原因

你遇到的报错是混淆了numpy数组自带的resize方法和OpenCV提供的cv2.resize()函数的调用规则导致的:
你代码中写的img.resize()是numpy数组的原生方法,它的作用是原地修改数组的形状,仅接受目标形状元组作为核心入参,不会返回新数组,和你预期的OpenCV缩放图像的功能逻辑、参数规则完全不匹配。哪怕你把参数改成固定的300、500,多个单独的整数参数也不符合numpy.resize的入参要求,所以依然会触发类型错误。

其他关联错误点

除了resize调用方式错误外,你的代码还有以下几处问题:

  • cv2.resize的参数顺序错误:OpenCV的resize第二个参数要求是(新宽度, 新高度)的元组,和img.shape返回的(高度, 宽度, 通道数)顺序相反,直接传img.shape的对应值会导致宽高颠倒。
  • cv2.imshow第一个参数要求是窗口名称字符串,你直接传入img数组会触发参数类型错误。
  • 方法拼写错误:cv2.destoryAllWindows正确拼写为cv2.destroyAllWindows。
  • cv2.imwrite第一个参数要求是保存路径字符串,你写的"Resized"+img是字符串和数组拼接,会触发类型错误。

修正后可运行代码

import cv2
import glob
for image_path in glob.glob("*.jpg"):
    img = cv2.imread(image_path, 1)
    # 计算新的宽高,注意OpenCV resize参数宽在前高在后
    new_width = int(img.shape[1] / 2)
    new_height = int(img.shape[0] / 2)
    # 正确调用OpenCV的resize方法
    rs = cv2.resize(img, (new_width, new_height))
    # 传入窗口名作为第一个参数
    cv2.imshow("Resized Image", rs)
    cv2.waitKey(2000)
    cv2.destroyAllWindows()
    # 拼接正确的输出文件名
    cv2.imwrite(f"Resized_{image_path}", rs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:15:05