如何在tkinter中显示HSV图像 - python 2.7

0 投票
1 回答
1371 浏览
提问于 2025-04-18 03:47

我正在把一张RGB格式的图片转换成HSV格式,并想把它显示在一个标签上。但是我遇到了错误。

这是我的代码片段:

 def hsv_img():
        img1=cv2.medianBlur(img,3)
        imghsv = cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
        lw_range=np.array([160,170,50])
        up_range=np.array([179,250,220])
        imgthresh1=cv2.inRange(imghsv,lw_range,up_range)
        imgthresh=Image.open(imgthresh)
        re_hsv=imhsv.resize((360,360),Image.ANTIALIAS)
        imhsv1=ImageTk.PhotoImage(re_hsv)
        lb_hsv = Label(windo, image = imhsv1,relief=SOLID)
        lb_hsv.image=imhsv1
        lb_hsv.pack()
        lb_hsv.place(x=230,y=180) 

而我遇到的错误是:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Balu\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.0.3.1262.win-x86\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "E:\python\track\guinew.py", line 215, in hsv_img
imhsv=Image.open(imgthresh)
File "C:\Users\Balu\AppData\Local\Enthought\Canopy32\System\lib\site-packages\PIL\Image.py", line 1956, in open
prefix = fp.read(16)

AttributeError: 'numpy.ndarray' object has no attribute 'read'

那么,怎么才能显示HSV格式的图片呢?有没有其他方法可以尝试?欢迎任何建议!

提前谢谢大家!

1 个回答

1

这个错误发生在你调用 Image.open(imgthresh) 的时候,因为 Image.open 需要一个像文件一样的对象,但是 imgthresh 是一个 Numpy 数组。

你可以试着完全去掉那一行代码。

编辑:这是一个完整的可以运行的版本(在我的电脑上):

from PIL import Image, ImageTk
from Tkinter import Tk, Label, SOLID
import cv2
import numpy as np

img = np.array(Image.open('some-file.png'))
window = Tk()

def hsv_img():
  img1=cv2.medianBlur(img,3)
  imghsv = cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
  lw_range=np.array([160,170,50])
  up_range=np.array([179,250,220])
  imgthresh1=cv2.inRange(imghsv,lw_range,up_range)
  re_hsv=Image.fromarray(imghsv).resize((360,360),Image.ANTIALIAS)
  imhsv1=ImageTk.PhotoImage(re_hsv)
  lb_hsv = Label(window, image = imhsv1,relief=SOLID)
  lb_hsv.image=imhsv1
  lb_hsv.pack()
  lb_hsv.place(x=230,y=180)

hsv_img()
window.mainloop()

我需要重命名一些东西,并在将图片调整为 360x360 时添加调用 Image.fromarray

看起来大多数困惑来自于不同的 numpy/PIL/OpenCV/Tkinter 图片格式。你可能会觉得 这个转换指南 有用,虽然它有点过时。

撰写回答