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:
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:
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:
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