python的ImageTk.PhotoImage大坑及解决
作者:_less 发布时间:2021-02-24 13:53:04
python的ImageTk.PhotoImage大坑
如果大家遇到这样的报错:
Exception in Tkinter callback
Traceback (most recent call last):
File "E:\Anaconda3_files\lib\site-packages\PIL\Image.py", line 2515, in fromarray
mode, rawmode = _fromarray_typemap[typekey]
KeyError: ((1, 1, 3), '<f8')During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:\Anaconda3_files\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "D:\Junior Spring\Digital Image Processing and Experiment\数字实验备份\结课实验\ImgProcessing.py", line 806, in Sobel_Sharpening
image = ImageTk.PhotoImage(Image.fromarray(img))
File "E:\Anaconda3_files\lib\site-packages\PIL\Image.py", line 2517, in fromarray
raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type
网上很多教程的方法我也试过,没有用,也调试不出为什么
这里有个很关键的信息:Cannot handle this data type
说明是数据的类型错了,但再三检查后,明明就是带入的<class ‘numpy.ndarray’>类型
所以,大坑来了
请仔细检查自己array里面每个数的类型,它必须是<class ‘numpy.uint8’>,否则就会报错
可以这样改:
dst = dst.astype(np.uint8)
image = ImageTk.PhotoImage(Image.fromarray(dst))
Tkinter PhotoImage 踩坑记录
1.直接使用PhotoImage(file= ‘xxxx’)报错:_tkinter.TclError: couldn’t recognize data in image file “xxxxx.png”
原因:PhotoImage支持的图片格式有限。
解决办法:使用PILLOW库的ImageTk
1.如果没有安装PILLOW插件,请安装插件,使用 “pip install PILLOW”命令安装即可
2.生成PhotoImage对象:
代码:
from PIL import Image
from PIL import ImageTk
img = Image.open(filePath)
img = ImageTk.PhotoImage(img)
2.PhotoImage显示问题:显示空白框,大小是图片的真实大小
原因:见https://docs.Python.org/2/library/tkinter.html#images,说白了就是图像数据引用被回收了图片就显示不出来了,只会显示一个空box。
解决办法:保存PhotoImage对象即可,示例代码如下:
代码:
imgDict = {}
def getImgWidget(filePath):
if os.path.exists(filePath) and os.path.isfile(filePath):
if filePath in imgDict and imgDict[filePath]:
return imgDict[filePath]
img = Image.open(filePath)
#print(img.size)
img = ImageTk.PhotoImage(img)
imgDict[filePath] = img
return img
return None
来源:https://blog.csdn.net/weixin_42815846/article/details/106864921


猜你喜欢
- 本文实例为大家分享了pygame实现俄罗斯方块的具体代码,供大家参考,具体内容如下import random, time, pygame,
- 涉及到详情页爬取目录结构:kaoshi_bqg.pyimport scrapyfrom scrapy.spiders import Rule
- 1.概述Go的字符串是一个不可改变的数据结构,这和其他语言如JAVA,C++等的设定很类似.总体来说,有如下五种拼接方式,下面我们将论述各种
- 修改闭包内使用的外部变量错误示例:# 定义一个外部函数def func_out(num1): # 定义一个内部函数
- selenium执行js优点:直接调用浏览器的环境障碍:绕过selenium监测原理:# 执行js代码bro.execute_script(
- 前面已经介绍了关于Dreamweaver MX 2004的基本操作
- 网页显示不正常,出现图片错位,文字跑远……等等,别急,试试IE8自带的”兼容性视图”功能吧!其实出现网页显示问题,一般不是您的电脑或者浏览器
- 摘要在机器视觉中,对于图像的处理有时候因为放置的原因导致ROI区域倾斜,这个时候我们会想办法把它纠正为正确的角度视角来,方便下一步的布局分析
- 1. 排名函数与PARTITION BY --所有数据 SELECT * FROM dbo.student AS a INNER JOIN
- 前言Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-
- 我就废话不多说了,大家还是直接看代码吧!import pymysql,hashlib结果:单条结果 {'id': 1,
- 本文实例为大家分享了python实现固定尺寸图像拼接,供大家参考,具体内容如下讲解1、代码效果:固定尺寸图像拼接代码import osimp
- 前言由于项目需要生成多条数据,并保存到数据库当中,在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,项目使用了Sp
- 在之前给大家分享过这篇文章:CentOS 7.0下使用yum安装mysql的方法详解,小编觉得不够详细,今天给大家通过本文给大家做个补充,感
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 在上一篇文章中,简单介绍了下闭包(closure)和原型链,现在继续来研究闭包的内部机制。对了,所有的东西都参考自这篇文章:Javascri
- 一、pyqt5的UI中嵌入matplotlib的方法1、导入模块导入模块比较简单,首先声明使用pyqt5,通过FigureCanvasQTA
- 最新MySql8.27主从复制以及SpringBoot项目中的读写分离实战1、MySql主从复制MySQL主从复制是一个异步的复制过程,底层
- var yData = [];//Y轴数据 var xData = [];//X轴数据 $(data.rows).each(function
- 一、调用百度接口进行人脸属性识别安装好baidu-aip模块,获取了百度AI接口密钥后,即可调用百度接口进行人脸属性识别了。首先以杨紫的图片