Какой формат данных читает функция cv2.imread? Работа с tkinter и python - PullRequest
0 голосов
/ 07 января 2019

Добрый день, я новичок в программировании на Python, и мне было поручено создать собственный графический интерфейс с изображением внутри моего графического интерфейса. У меня был хороший прогресс, но я застрял, когда хочу вставить изображение в мой графический интерфейс с моей веб-камеры. Однако мне удалось получить изображение с веб-камеры, но это должно быть другое окно с окном GUI.

В моих кодах GUI он включает в себя простой код, подобный этому:

(я использую диапазон i <25, потому что моя веб-камера нуждается в прогреве) </p>

для i в диапазоне (25):

     _ , frame = cap.read()
     frame = cv2.flip(frame, 1)
     cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)

     i+=1

     cv2.imshow("Latex Truck", cv2image)
     img = cv2image
     label = Label(root, image = img)
     label.place(x = 300, y = 300)

Теперь проблема в следующем. Я успешно получил кадр, который мне нужен, и смог показать его благодаря cv2.imshow, но когда я пытаюсь использовать тот же источник, который является "cv2image" в tkinter, он показывает эту ошибку.

Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__
    return self.func(*args)
  File "C:\Users\FF7_C\OneDrive\Desktop\Logo.py", line 82, in Capture
    label = Label(root, image = img)
  File "C:\Python34\lib\tkinter\__init__.py", line 2573, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "C:\Python34\lib\tkinter\__init__.py", line 2091, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "[[[ 49  32  22 255]

Теперь, логически, я думаю, что я сделал то, что мне нужно было сделать, это извлечь изображение с веб-камеры, что я и сделал, единственная проблема сейчас заключается в том, что мне нужно понять, почему tkinter не может прочитать ту же информацию, что и cv2.imshow.

Может ли кто-нибудь наставить меня в этом? Большое спасибо! :)

1 Ответ

0 голосов
/ 07 января 2019

Формат, возвращаемый cv2.cvtColor(...), имеет тип numpy.ndarray. Вам необходимо преобразовать его в формат, распознаваемый tkinter, используя модуль Pillow:

from tkinter import *
from PIL import Image, ImageTk
import cv2

root = Tk()

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
# convert to image format recognized by tkinter
img = Image.fromarray(img)
tkimg = ImageTk.PhotoImage(image=img)

Label(root, image=tkimg).pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...