如何显示HSV图像 - tkinter,python 2.7

时间:2014-04-22 17:12:37

标签: python python-2.7 numpy tkinter

我将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 个答案:

答案 0 :(得分:1)

当您致电Image.open(imgthresh)时会引发错误,因为Image.open expects a file-like object,但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图像格式。您可能会发现this conversion guide有用,虽然它有些过时。