使用 OpenCV 读取图像并使用 Tkinter 显示它

新手上路,请多包涵

我在 Ubuntu 14.04 LTS 上有一个非常简单的程序来使用 OpenCV 读取和显示图像:

 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 完成。

编辑:

从上面的答案,我改变了这一行:

 im = Image.open('slice001.hrs').convert2byte()

到:

 im=cv2.imread() # (I imported cv2)

但是我得到了一个错误。

我将不胜感激任何提示。

原文由 user4584333 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 844
2 个回答

您可能想看看 这个。这是对我有用的东西:

 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

原文由 Ha Dang 发布,翻译遵循 CC BY-SA 3.0 许可协议

对我来说,上面的两个答案都不起作用,但很接近。以下代码对我有用(我也想使用 place 而不是 pack ):

 from PIL import ImageTk, Image

image = cv2.cvtColor(self.image, cv2.COLOR_BGR2RGB)
image = ImageTk.PhotoImage(image=Image.fromarray(image))
label_image = Label(self.detection, image=image)
label_image.image = image
label_image.place(x=0, y=0, anchor="w")

原文由 Jop Knoppers 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题