我在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)
但我收到了一个错误。
我很感激任何提示。
答案 0 :(得分:10)
您可能需要查看this one。这对我有用:
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
答案 1 :(得分:0)
对于Python3,我不得不修改@Ha Dang回答:
<link rel="stylesheet" type="text/css" href="controller.css">
要求是:
<强> PIP3 强>
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
<强>冲泡强>
numpy==1.13.1
opencv-python==3.3.0.9
Pillow==4.2.1
答案 2 :(得分:0)
对我来说,以上两个答案均无效,但接近。以下代码为我完成了窍门(我也想使用place而不是pack):
Widget