关于python:使用OpenCV读取图像并用Tkinter显示
我在Ubuntu 14.04 LTS上有一个非常简单的程序,可以使用OpenCV读取和显示图像:
| 1 2 3 4 5 6 | import cv2 #import OpenCV img = cv2.imread('picture.jpg') #read a picture using OpenCV cv2.imshow('image',img) # Display the picture cv2.waitKey(0) # wait for closing cv2.destroyAllWindows() # Ok, destroy the window | 
我的问题:
如何在OpenCV中继续读取图片,但使用Tkinter进行显示?
我问这个问题是因为我想为我的程序创建一个接口,但是OpenCV无法做到这一点,因此我需要Tkinter。 但是,所有图像处理我都必须使用OpenCV在后台进行。 仅显示结果必须使用Tkinter完成。
编辑:
从上面的答案,我改变了这一行:
| 1 | im = Image.open('slice001.hrs').convert2byte() | 
至:
| 1 | im=cv2.imread() # (I imported cv2) | 
但是我有一个错误。
我将不胜感激。
您可能要看一看。 这对我有用:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import numpy as np import cv2 import Tkinter import Image, ImageTk # Load an color image img = cv2.imread('img.png') #Rearrang the color channel b,g,r = cv2.split(img) img = cv2.merge((r,g,b)) # A root window for displaying objects root = Tkinter.Tk() # Convert the Image object into a TkPhoto object im = Image.fromarray(img) imgtk = ImageTk.PhotoImage(image=im) # Put it in the display window Tkinter.Label(root, image=imgtk).pack() root.mainloop() # Start the GUI | 
- 谢谢。但是我看不到您在哪里使用OpenCV读取图像?
- 只需编辑答案即可。但是,伙计们,您为什么不自己尝试一下呢? DIY-那是学习的最佳方式。
- 我尝试过(请参阅我的编辑)。您的第二个解决方案几乎可以正常工作。但是,只有一个缺点:我的图像几乎是橙色的,但是现在几乎以蓝色显示了:(
- 我添加了RGB模式以像这样im = Image.fromarray(img,RGB)读取它,但结果相同:(
- 这是因为颜色通道顺序是BBGR,而不是RGB。您可以在代码中添加以下两行:b,g,r = cv2.split(img)img = cv2.merge((b,g,r))
- 即使我认为您的意图是正确的(拆??分和合并颜色),结果还是一样。你为我做了很多努力。
- 嘿,注意cv2.merge参数的顺序。在我的评论中,它的状态不佳。尝试用我的答案中的代码。
- 是的,我在订购颜色时出错。我不知道该如何感谢你。
- 除了使用cv2.merge,您还可以简单地使用numpy索引来重新排列图像的第三维:out = img[:,:,::-1]。只是一个建议,但是在引用OpenCV文档时,合并是可接受的方式。
对于Python3,我必须修改@Ha Dang答案:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from tkinter import * from PIL import Image, ImageTk import cv2 import numpy as np image_name = 'bla.jpg' image = cv2.imread(image_name) #Rearrang the color channel b,g,r = cv2.split(image) img = cv2.merge((r,g,b)) # A root window for displaying objects root = Tk() # Convert the Image object into a TkPhoto object im = Image.fromarray(img) imgtk = ImageTk.PhotoImage(image=im) # Put it in the display window Label(root, image=imgtk).pack() root.mainloop() # Start the GUI | 
要求是:
点3
| 1 2 3 | numpy==1.13.1 opencv-python==3.3.0.9 Pillow==4.2.1 | 
酿造
| 1 2 | python3 tcl-tk | 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号