OpenCV2 i kamerka regulacja.

0

Witam,
Czy mogę prosić o pomoc jak można w opencv2 jednocześnie otworzyć 2 okna z których jedno będzie wyświetlało obraz z kamery a w drugim były by suwaki do regulacji zmiennych (np jasność, nasycenie itd ? ) Obecnie udało mi się sklecić coś takiego jak poniżej wklejam, jednak nie mogę mieć jednocześnie otwartych 3 okienek.. albo Ustawienia albo Kamerka.

import Tkinter as tk
import numpy as np
import cv2    
from Tkinter import *

def show_values():
    print (w1.get())

def write_slogan():
    print("Tkinter is easy to use!")

cap = cv2.VideoCapture(0)
def show_webcam():
			while(True):
				ret, frame = cap.read()
				kolor = cv2.cvtColor(frame, cv2.COLOR_RGB2RGBA)
				cap.set(cv2.CAP_PROP_EXPOSURE,50)
				cap.set(cv2.CAP_PROP_GAIN,50)
				cap.set(cv2.CAP_PROP_SATURATION,50)
				cap.set(cv2.CAP_PROP_HUE,50)
				cv2.imshow('frame',kolor)
				if cv2.waitKey(1) & 0xFF == ord('q'):
					break
			cap.release()
			cv2.destroyAllWindows()

def create_window():
 show_webcam()
 
def ustawienia_parametra():
	print("Tkinter is easy to uddse!")
	master = Tk()
	w1 = Scale(master, from_=0, to=42, tickinterval=8)
	w1.set(19)
	w1.pack()
	Button(master, text='Show', command=show_values).pack()

root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
class MainWindow(tk.Frame):
	button = tk.Button(frame, 
					text="QUIT", 
					fg="red",
					command=quit)
	button.pack(side=tk.LEFT)
	slogan = tk.Button(frame,
					text="Hello",
					command=write_slogan)
	slogan.pack(side=tk.LEFT)
	slogan2 = tk.Button(frame,
					text="Kamera",
					command=create_window)
	slogan2.pack(side=tk.LEFT)
	ustawienia = tk.Button(frame,
					text="Ustawienia",
					command=ustawienia_parametra)
	ustawienia.pack(side=tk.LEFT)

	

root.mainloop()

Proszę serdecznie o wyrozumiałość. Pierwszy raz mierze się z Pythonem i OpenCV. Całość staram się uruchomić na windowsie w python 275.

0

Niestety nie wiem jak to wygląda od strony pythona2, ale tkinter pozwala ci otworzyć nieskończenie wiele okien.
Najprościej stworzyć w funkcji "ustawienia_parametra" nowe okno jak poprzednie: root2 = tk.Tk(); (itd.)
Najoptymalniej, niestety nie wiem jak to rozwiązać.

0

Hey dziękuje za odpowiedź ale podejrzewam że problem jest związany z oknem OpenCV. Ponieważ otwierając okno opencv program "zacina się"/"wpada w pętle" ? i w czasie gdy okno opencv jest otwarte tylne okno jest w tle i nie reaguje na kliknięcia.

0

I będzie się tak działo, ponieważ robisz while True dla okna z kamerą. Chyba że OpenCV wrzucisz we frame'a tkintera który obsłuży obie interakcje :). Wraz z mainloop'em root'a. (ewentualnie przekażesz root'a do funkcji w której obsługujesz OpenCV żeby go mainloop'ować.

@Edit:
root.mainloop() odpowiada za przechwytywanie interakcji z oknami w tkinetrze. Więc gdy nie zachodzi, okna nie reagują, zakomentuj linię, zobaczysz że nie będzie działać niezależnie jak proste będzie okienko :). [oczywiście z jakimś while True, aby program się nie zakończył od razu]

1 użytkowników online, w tym zalogowanych: 0, gości: 1