Читать изображение с 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.

EDIT:

из ответа выше, я меняю строку:

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

В:

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

но я получил ошибку.

Я был бы признателен за любые намеки.

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

для Python3 мне пришлось изменить @Ha Dang ответ:

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

требования:

pip3

numpy==1.13.1
opencv-python==3.3.0.9
Pillow==4.2.1

brew

python3
tcl-tk