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

