[Reproduziert] OpenCV + Python verwendet die Spurleiste als Palette (9)

Ich glaube, jeder, der mit Java in Kontakt gekommen ist, kennt die Spurleiste. Sie wird in Java als Schieberegler bezeichnet. Heute werden wir sie auch in OpenCV als Basisstudie implementieren.

Hier erstellen wir eine einfache Anwendung, um die angegebene Farbe anzuzeigen. Wir erstellen ein Fenster zur Anzeige von Farben und drei Verfolgungsleisten zur Angabe der Farben B, G und R. Schieben Sie die Spurleiste und ändern Sie die Fensterfarbe entsprechend. Standardmäßig ist die Anfangsfarbe auf Schwarz eingestellt.

Wir müssen verschiedene Funktionen verstehen:

createTrackbar (const string & trackbarname, const string & winname, int * value, int count , TrackbarCallback onChange = 0, void * userdata = 0)

Für die Funktion cv.createTrackbar () sind ihre Parameter wie folgt definiert:

Parameter 1: Name der Spurleiste

Parameter 2: Fenstername

Parameter 3: Ausgangsposition des Schiebereglers

Parameter 4: Der Wert, der die maximale Position des Schiebereglers darstellt

Parameter 5: Der Standardwert ist 0, was auf die Rückruffunktion verweist

Parameter 6: Der Standardwert ist 0, der vom Benutzer an die Rückruffunktion übergebene Datenwert

getTrackbarPos (const string & trackbarname, const string & winname)

Funktionsrolle:

Ermitteln Sie den Wert der Position des Schiebereglers

Parameter 1: Name des Fortschrittsbalkens

Parameter 2: Fenstername

Rückgabewert: Position des Fortschrittsbalkens

getTrackbarPos (Trackbarname , Gewinnname)

Parameterdefinition:

Trackbar-Name - Der Name der Trackbar.

winname - der Name des übergeordneten Fensters der Spurleiste.

Diese Funktion gibt die aktuelle Position der angegebenen Spurleiste zurück.

Eine weitere wichtige Anwendung der Spurleiste ist die Verwendung als Taste oder Schalter. Standardmäßig verfügt OpenCV nicht über Tastenfunktionen. Daher können wir die Spurleiste verwenden, um solche Funktionen zu erhalten. In der Anwendung haben wir einen Schalter erstellt, die Anwendung kann nur ausgeführt werden, wenn der Schalter eingeschaltet ist, andernfalls ist der Bildschirm immer schwarz.

Schauen Sie sich nun den Code an:

	view plaincopy to clipboardprint?
1. import numpy as np  
2. import cv2 as cv  
3. def nothing(x):  
4.     pass  
5. # Create a black image, a window  
6. img = np.zeros((300,512,3), np.uint8)  
7. cv.namedWindow('image')  
8. # create trackbars for color change  
9. cv.createTrackbar('R','image',0,255,nothing)  
10.cv.createTrackbar('G','image',0,255,nothing)  
11.cv.createTrackbar('B','image',0,255,nothing)  
12.# create switch for ON/OFF functionality  
13.switch = '0 : OFF \n1 : ON'  
14.cv.createTrackbar(switch, 'image',0,1,nothing)  
15.while(1):  
16.    cv.imshow('image',img)  
17.    k = cv.waitKey(1) & 0xFF  
18.    if k == 27:  
19.        break  
20.    # get current positions of four trackbars  
21.    r = cv.getTrackbarPos('R','image')  
22.    g = cv.getTrackbarPos('G','image')  
23.    b = cv.getTrackbarPos('B','image')  
24.    s = cv.getTrackbarPos(switch,'image')  
25.    if s == 0:  
26.        img[:] = 0  
27.    else:  
28.        img[:] = [b,g,r]  
29.cv.destroyAllWindows()  

Wir können den Effekt sehen:
Fügen Sie hier eine Bildbeschreibung ein

Dies ist natürlich nur eine Farbpalette, die angepasst werden kann. Wir haben bereits über die Funktion der Verwendung der Maus als Pinsel in OpenCV gesprochen. Jetzt erstellen wir ein Zeichenbrett und ändern dann mithilfe der Spurleiste die Farbe des Pinsels, ähnlich wie Die "Zeichen" -Software unseres Computers ist dieselbe.

Im vorherigen Tutorial haben wir EVENT_FLAG_LBUTTON verwendet, um anzuzeigen, dass die aktuelle linke Maustaste gedrückt ist, EVENT_MOUSEMOVE, um die Mausbewegung anzuzeigen, und cv2.circle als Pinsel. Im letzten Tutorial ist unsere Standardstiftfarbe Rot, und der vorletzte Parameter ist die Farbdarstellung. Der Code lautet:

cv2.circle (img, (x, y), 1, [0, 0, 255], 1)

In diesem Tutorial müssen wir jedoch dynamische Variablen übergeben, um die Farbe des Pinsels jederzeit ändern zu können.

cv2.circle (img, (x, y), 1, [b, g, r], 1)

b, g, r werden durch die Spurleiste bestimmt:

cv2.createTrackbar ('R', 'Bild', 0, 255, Rückruf)

cv2.createTrackbar ('B', 'Bild', 0, 255, Rückruf)

cv2.createTrackbar ('G', 'Bild', 0, 255, Rückruf)

Wir müssen auch beachten, dass für OpenCV das Farbformat BGR und nicht RGB ist, daher müssen wir die Parameter korrekt übergeben.

Nun schauen wir uns den Code an:

	view plaincopy to clipboardprint?
1. import cv2  
2. import numpy as np  
3.   
4. def callback(object):  
5.    pass  
6.  
7. img = np.zeros((400, 400, 3), np.uint8)  
cv2.namedWindow('image')  
8.  
9. switch = '0:OFF\n1:ON'  
10.cv2.createTrackbar(switch, 'image', 0, 1, callback)  
11.  
12.cv2.createTrackbar('R', 'image', 0, 255, callback)  
13.cv2.createTrackbar('B', 'image', 0, 255, callback)  
14.cv2.createTrackbar('G', 'image', 0, 255, callback)  
15.  
16.def Mouseback(event, x, y, flags, param):  
17.    if flags == cv2.EVENT_FLAG_LBUTTON and event == cv2.EVENT_MOUSEMOVE:  
18.        cv2.circle(img, (x, y), 1, [b, g, r], 1)  
19.  
20.img[:] = [255, 255, 255]  
21.  
22.while(True):  
23.    r = cv2.getTrackbarPos('R', 'image')  
24.    g = cv2.getTrackbarPos('G', 'image')  
25.    b = cv2.getTrackbarPos('B', 'image')  
26.    if cv2.getTrackbarPos(switch, 'image') == 1:  
27.        cv2.setMouseCallback('image', Mouseback)  
28.    else:  
29.        img[:] = [255, 255, 255]  
30.    if cv2.waitKey(10) & 0xFF == ord('q'):  
31.        break  
32.    cv2.imshow('image', img)  
33.cv2.destroyAllWindows()  

Experimenteller Effekt:
Fügen Sie hier eine Bildbeschreibung ein

Drücken Sie die Q-Taste, um den Vorgang zu beenden. Sie können sehen, dass die Farbe des Pinsels jederzeit geändert werden kann.

Lassen Sie uns nun einige erweiterte Operationen ausführen. Wir werden den Code aus dem vorherigen Lernprogramm vollständig mit der Spurleiste kombinieren. Im vorherigen Lernprogramm haben wir ein Zeichenbrett erstellt und den Pinsel mit der Q-Taste gewechselt. Standardmäßig wird ein Rechteck gezeichnet. Drücken Sie Das untere Q ist eine Strichzeichnung. Jetzt ändern wir die Farbe des Pinsels, um erweiterte Vorgänge abzuschließen. Die dünne Zugstange kann verwendet werden, um die Dicke der Linie anzupassen. Wir übergeben weiterhin ihre Parameter:

cv2.circle (img, (x, y), dünn, Farbe, -1)

Gleichzeitig fügen wir der Einfachheit halber die Radiergummifunktion hinzu, mit der das Zeichenbrett tatsächlich weiß wird.

Schauen wir uns den Code an:

	view plaincopy to clipboardprint?
1. import cv2  
2. import numpy as np  
3.   
4. drawing = False  
5. mode = True  
6. ix, iy = -1, -1  

7. def nothing(x):  
8.     pass  
9.     
10.def draw_circle(event, x, y, flags, param):  
11.    r = cv2.getTrackbarPos('R', 'image')  
12.    g = cv2.getTrackbarPos('G', 'image')  
13.    b = cv2.getTrackbarPos('B', 'image')  
14.    color = (b, g, r)  
15.    s = cv2.getTrackbarPos('eraser', 'image')  
16.    if s == 1:  
17.        color = (255, 255, 255)  
18.    thin = cv2.getTrackbarPos('thin', 'image')  
19.  
20.    global ix, iy, drawing, mode  
21.    if event == cv2.EVENT_LBUTTONDOWN:  
22.        drawing = True  
23.        ix, iy = x, y  
24.    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:  
25.        if drawing:  
26.            if mode:  
27.                cv2.rectangle(img, (ix, iy), (x, y), color, -1)  
28.            else:  
29.                cv2.circle(img, (x, y), thin, color, -1)  
30.    elif event == cv2.EVENT_LBUTTONUP:  
31.        drawing == False  
32.    
33.img = np.zeros((512, 512, 3), np.uint8)  
34.img[:] = 255  
35.cv2.namedWindow('image')  
36.cv2.createTrackbar('R', 'image', 0, 255, nothing)  
37.cv2.createTrackbar('G', 'image', 0, 255, nothing)  
38.cv2.createTrackbar('B', 'image', 0, 255, nothing)   
39.cv2.createTrackbar('eraser', 'image', 0, 1, nothing)  
40.cv2.createTrackbar('thin', 'image', 1, 50, nothing)  
41.  
42.cv2.setMouseCallback('image', draw_circle)  
43.  
44.while (1):  
45.    cv2.imshow('image', img)  
46.    k = cv2.waitKey(1) & 0xFF  
47.    if k == ord('q'):  
48.        mode = not mode  
49.    elif k == 27:  
50.        break  

Experimenteller Effekt:
Fügen Sie hier eine Bildbeschreibung ein

Ist es nicht hübsch? Drücken Sie zum Beenden die Taste esc und zum Wechseln zwischen Rechtecken und Linien q. Wir können auch einfach einen Zeichenvorgang abschließen.

Also ist dieses Tutorial hier vorbei, du musst immer noch üblicher üben, nicht so gut wie üben.

Überprüfen Sie die Artikelzusammenfassungsseite https://blog.csdn.net/weixin_44237705/article/details/107864965
Weitere technische Informationen zu openvino können in der Gruppe ~ ausgetauscht werden
Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/weixin_44237705/article/details/107999095
Empfohlen
Rangfolge