Python OpenCV, как объединить все функции с tkinter? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть это задание, где я должен создать приложение, подобное приложению рисования на Windows в Python с библиотекой OpenCV. Я пробовал так много разных способов реализации решения, однако я только начал работать с Python, поэтому я все еще учусь. Сначала приложение должно спросить вас, хотите ли вы sh загрузить изображение или сделать снимок с помощью камеры. После этого приложение должно загрузить картинку, и вы можете делать такие вещи, как рисование (функция обратного вызова мыши), стирать нарисованное и текст. Мой код на данный момент таков (имейте в виду, я знаю, что он работает не так, как я хочу, потому что я также использовал tkinter и попытался сделать GUI, но функция рисования перекрывает все и выполняет только эту функцию - она ​​игнорирует все остальные функции):

import cv2
import numpy as np
import matplotlib.pyplot as plt
from tkinter import *

"""
drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1

# mouse callback function
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,mode

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix,iy = x,y

    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing == True:
            if mode == True:
                cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv2.circle(img,(x,y),5,(0,0,255),-1)

    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        if mode == True:
            cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
        else:
            cv2.circle(img,(x,y),5,(0,0,255),-1)


            img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)

while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1) & 0xFF
    if k == ord('m'):
        mode = not mode
    elif k == 27:
        break

cv2.destroyAllWindows()

"""

tkWindow = Tk()
tkWindow.geometry('400x400')
tkWindow.title('Vaja 1')



#Function to capture camera
def cameracapture():
    capture = cv2.VideoCapture(0) 
    if capture.isOpened() == False:
        print("Kamere se ta trenutek ne da odpreti!")
    cv2.namedWindow("Kamera")
    while True:
        ret, okvir = capture.read()
        if ret == True:
            cv2.imshow("Kamera", okvir)
            if cv2.waitKey(10) & 0xFF == ord('a'):
                break
            else:
                break
    capture.release()
##################################################
#Function to capture camera
def captureimage():
     picture = cv2.imread('peace.png', 1)
     cv2.namedWindow("Paintlike App")
     cv2.imshow("Picture", picture)
     cv2.waitKey()
     cv2.destroyAllWindows()
################################################
#Saving on disk
def saveOnDisk():
    cv2.imwrite("saved.png", image)

################################################
#Adding text to the picture
def textAdd():
    img = cv2.imread('peace.png', 1)
    font                   = cv2.FONT_HERSHEY_SIMPLEX
    bottomLeftCornerOfText = (10,500)
    fontScale              = 1
    fontColor              = (255,255,255)
    lineType               = 2
    cv2.putText(img,'Hello World!', 
    bottomLeftCornerOfText, 
    font, 
    fontScale,
    fontColor,
    lineType)

    cv2.imshow("Slika",img)
    cv2.waitKey()
    cv2.destroyAllWindows()
################################################

button1 = Button(tkWindow,
text = 'Camera',
command = cameracapture)
button1.pack()

button2 = Button(tkWindow,
text = "Picture",
command = captureimage)
button2.pack()

button3 = Button(tkWindow,
text = "Save",
command = saveOnDisk)
button3.pack()

button4 = Button(tkWindow,
text = "Text",
command = textAdd)
button4.pack()

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