【问题标题】:how to display HSV image - tkinter, python 2.7如何显示 HSV 图像 - tkinter,python 2.7
【发布时间】:2014-04-24 06:27:09
【问题描述】:

我正在将 RGB 图像转换为 HSV,并尝试在标签中显示相同的图像。但我遇到了错误。

我的代码 sn-p 是:

 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 图像,除了我尝试过的方法之外,还有其他方法吗?欢迎提出任何建议!

提前致谢!

【问题讨论】:

  • 错误提示Image 没有名为read 的属性!所以也许你之前在代码中使用了Image 作为变量(我认为)!
  • @Constantine 我没有使用Image 作为变量。

标签: python python-2.7 numpy tkinter


【解决方案1】:

调用Image.open(imgthresh)时会抛出错误,因为Image.openexpects 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 很有用,尽管它有点过时了。

【讨论】:

  • 确实,从 OP 显示的代码 sn-p 以及 @peri 所述,这行似乎没有用。但是,我可能会补充一点,如果您想将 Numpy 数组转换为 PIL 图像,请使用 PIL 库的 Image.fromarray() 函数。
  • @perimosocordiae 如果我按照您的指定删除该行,那么我想如何在屏幕上显示 HSV 图像。我没有得到这个。你能帮我举个例子吗,你在哪里使用 RGB 图像并将其转换为 HSV 并显示它。这对我有很大帮助。
猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多