web-dev-qa-db-ja.com

OpenCVで画像を読み取り、Tkinterで表示します

私はUbuntu14.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) 

しかし、エラーが発生しました。

ヒントをいただければ幸いです。

7
user4584333

これ を見てみてください。これが私のために働く何かです:

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
11
Ha Dang

Python3の場合、@ HaDangの回答を変更する必要がありました。

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

要件は次のとおりです。

pip

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

brew

python3
tcl-tk
0
lony

私にとって、上記の両方の答えはうまくいきませんでしたが、近いところです。次のコードは私のためにトリックをしました(私もパックの代わりに場所を使いたいです):

    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")
0
Jop Knoppers