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

