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

Python使用askopenfilename获取图片尺寸时遇TypeError错误求助

解决width, height = background.size的类型错误问题

嘿,这个错误我之前也踩过坑!问题出在你对background对象的类型判断上——你试图把一个整数拆成两个变量,说明background不是PIL库的Image实例,而是其他类型(比如OpenCV读取的numpy数组)。

错误根源

如果你的代码里是用cv2.imread(filename1)加载图片,那得到的background是一个numpy数组。数组的size属性是图像的总像素数(比如一张100×200的图,size就是20000,是个整数),自然没法拆成width和height两个变量。而PIL的Image对象的size属性才是包含宽、高的元组,能直接解包。

修正方案

根据你的需求选一种方式:

方案1:用PIL加载图片(推荐,符合你导入Image库的意图)

直接用Image.open()打开你选中的文件路径,就能得到正确的Image对象,然后正常获取尺寸:

import tkFileDialog
from tkFileDialog import askopenfilename # Open dialog box
from PIL import Image
import cv2
import numpy

filename1 = askopenfilename(filetypes=[("image","*.png")])
# 关键:用PIL Image打开选中的文件
background = Image.open(filename1)
# 现在可以正确解包size
width, height = background.size
print(f"图片宽:{width},高:{height}")

方案2:如果必须用OpenCV加载

要是你需要用OpenCV处理图片,就用shape属性获取尺寸,注意顺序是高在前,宽在后:

filename1 = askopenfilename(filetypes=[("image","*.png")])
background = cv2.imread(filename1)
# 取shape的前两个元素,顺序是height, width
height, width = background.shape[:2]
print(f"图片宽:{width},高:{height}")

小提醒

以后碰到这类解包错误,先打印一下background的类型和background.size的值,就能快速定位问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:19:10