python的ImageTk.PhotoImage大坑及解決
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\數(shù)字實驗備份\結(jié)課實驗\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
網(wǎng)上很多教程的方法我也試過,沒有用,也調(diào)試不出為什么
這里有個很關(guān)鍵的信息:Cannot handle this data type
說明是數(shù)據(jù)的類型錯了,但再三檢查后,明明就是帶入的<class ‘numpy.ndarray’>類型
所以,大坑來了
請仔細(xì)檢查自己array里面每個數(shù)的類型,它必須是<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,說白了就是圖像數(shù)據(jù)引用被回收了圖片就顯示不出來了,只會顯示一個空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以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決更改AUTH_USER_MODEL后出現(xiàn)的問題
這篇文章主要介紹了解決更改AUTH_USER_MODEL后出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python繪圖實現(xiàn)臺風(fēng)路徑可視化代碼實例
這篇文章主要介紹了Python繪圖實現(xiàn)臺風(fēng)路徑可視化代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
雙目測距python實現(xiàn)方法實戰(zhàn)(含標(biāo)定)
相機標(biāo)定對于雙目視覺系統(tǒng)至關(guān)重要,它涉及到獲取左右相機的內(nèi)參矩陣、畸變系數(shù)、旋轉(zhuǎn)矩陣和平移向量等關(guān)鍵參數(shù),這篇文章主要介紹了雙目測距python實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2024-11-11
Python使用GeekConcurrent實現(xiàn)量化編程
這篇文章主要為大家詳細(xì)介紹了Python中的協(xié)程并發(fā)編程以及如何使用GeekConcurrent庫來實現(xiàn)面向量化編程,感興趣的小伙伴可以了解一下2025-02-02

