Πίνακας περιεχομένων:

Ανίχνευση χρωμάτων σε Python χρησιμοποιώντας OpenCV: 8 βήματα
Ανίχνευση χρωμάτων σε Python χρησιμοποιώντας OpenCV: 8 βήματα

Βίντεο: Ανίχνευση χρωμάτων σε Python χρησιμοποιώντας OpenCV: 8 βήματα

Βίντεο: Ανίχνευση χρωμάτων σε Python χρησιμοποιώντας OpenCV: 8 βήματα
Βίντεο: Υποστήριξη Διπλωματικής Εργασίας Π. Φακριάση 2024, Ιούλιος
Anonim
Image
Image

Γειά σου! Αυτό το εκπαιδευτικό εργαλείο χρησιμοποιείται για να μάθετε πώς μπορείτε να εξαγάγετε ένα συγκεκριμένο χρώμα από μια εικόνα σε python χρησιμοποιώντας βιβλιοθήκη openCV. Εάν είστε νέοι σε αυτήν την τεχνική, τότε μην ανησυχείτε, στο τέλος αυτού του οδηγού θα μπορείτε να προγραμματίσετε το δικό σας πρόγραμμα ανίχνευσης χρώματος.

Ακολουθούν οι λειτουργίες ή μπορούμε να πούμε τεχνικές που θα μάθετε, 1. Πώς να διαβάσετε μια εικόνα

2. Τρόπος δημιουργίας γραμμών κομματιού

3. Πώς να προσαρμόσετε την τιμή της απόχρωσης, του κορεσμού και της τιμής μιας εικόνας χρησιμοποιώντας γραμμές κομματιού

4. Και τότε θα υπάρχει η τελική σας έξοδος

Μπορείτε να παρακολουθήσετε το βίντεο της εξόδου που έχω επισυνάψει παρακάτω.

Ας ξεκινήσουμε λοιπόν

Προμήθειες

  • Python 3
  • βιβλιοθήκη openCV
  • μουδιασμένη βιβλιοθήκη

Βήμα 1: Εισαγωγή βιβλιοθηκών

Εισαγωγή Βιβλιοθηκών
Εισαγωγή Βιβλιοθηκών

Η εικόνα είναι κίτρινης ferrari όπως φαίνεται και θα προγραμματίσουμε να βγάλουμε μόνο κίτρινο χρώμα από αυτήν την εικόνα

Το πρώτο βήμα θα είναι η εισαγωγή των βιβλιοθηκών μας

1. Περιλαμβάνει βιβλιοθήκη openCV. Ονομάζεται cv2 σε python

2. Συμπεριλαμβανομένης της numpy βιβλιοθήκης ως np. Το "ως" μας επιτρέπει να μουδιάζουμε ως np, οπότε δεν χρειάζεται να γράφουμε numpy ξανά και ξανά

Βήμα 2: Δημιουργία γραμμών κομματιού

Δημιουργία γραμμών κομματιών
Δημιουργία γραμμών κομματιών

Οι γραμμές κομματιών δημιουργούνται για να προσαρμόσουν την τιμή της απόχρωσης, του κορεσμού και της τιμής σε μια εικόνα.

cv2.namedWindow ("TrackBars") Αυτή η γραμμή κώδικα χρησιμοποιείται για τη δημιουργία ενός νέου παραθύρου εξόδου και το όνομα του παραθύρου δίνεται ως TrackBars (Μπορείτε να δώσετε οποιοδήποτε όνομα θέλετε)

cv2.resizeWindow ("TrackBars", 600, 250) Αυτή η λειτουργία χρησιμοποιείται για την αλλαγή μεγέθους ενός παραθύρου. Το "TrackBars" είναι για ποιο παράθυρο θέλετε να αλλάξετε το μέγεθος αφού ήθελα να αλλάξω το μέγεθος του παραθύρου TrackBars έχω γράψει αυτό το όνομα. Ακολουθούν δύο ακέραιοι. Αυτοί οι δύο ακέραιοι είναι το πλάτος και το ύψος. Μπορείτε να παίξετε με αυτούς τους δύο αριθμούς για να αλλάξετε το μέγεθος

Βήμα 3: Δημιουργία TrackBars για απόχρωση, κορεσμό και αξία

Δημιουργία TrackBars για απόχρωση, κορεσμό και αξία
Δημιουργία TrackBars για απόχρωση, κορεσμό και αξία
Δημιουργία TrackBars για απόχρωση, κορεσμό και αξία
Δημιουργία TrackBars για απόχρωση, κορεσμό και αξία

Τώρα θα δημιουργήσουμε συνολικά 6 TrackBars για Απόχρωση, Κορεσμό και αξία. Το καθένα θα έχει δύο, δηλαδή 1 για ελάχιστο και 1 για μέγιστο. Θα χρησιμοποιήσουμε τη λειτουργία createTrackbar του openCV. Αρχικά θα δούμε τη σύνταξη αυτής της συνάρτησης.

cv2.createTrackbar ("WINDOWNAME", "MAINWINDOWNAME", "RANGE"). Αυτό μπορεί να είναι μπερδεμένο, αλλά μην ανησυχείτε θα περάσουμε από κάθε βήμα. Λάβετε υπόψη ένα πράγμα ότι στο openCV οι τιμές της απόχρωσης είναι 179, ο κορεσμός είναι 255 και η τιμή είναι 255

1. Δημιουργία TrackBar για hue min:

cv2.createTrackbar ("Hue min", "TrackBars", 0, 179, κενό)

Σε αυτό το Hue min είναι το όνομα του trackbar, το TrackBars είναι το κύριο παράθυρο, 0 είναι η θέση στην οποία θα βρίσκεται το ρυθμιστικό μας και 179 είναι το εύρος που σημαίνει ότι το silder θα μετακινηθεί από 0-179

2. Δημιουργία TrackBar για hue max:

cv2.createTrackbar ("Hue max", "TrackBars", 179, 179, κενό)

Σε αυτό το Hue max είναι το όνομα της γραμμής κομματιών, το TrackBars είναι το κύριο παράθυρο, το 179 είναι η θέση στην οποία θα βρίσκεται το ρυθμιστικό μας και το 179 είναι το μέγιστο εύρος που σημαίνει ότι το λάσπη θα μετακινηθεί από 179-0

3. Παρομοίως επαναλάβετε τα βήματα για τα sat min, sat max, val min και val max όπως φαίνεται στην εικόνα

Η εικόνα με το λευκό φόντο είναι η εικόνα εξόδου. Έτσι θα φαίνονται οι μπάρες κομματιών σας

Βήμα 4: Πώς να διαβάσετε και να αλλάξετε το μέγεθος της εικόνας

Πώς να διαβάσετε και να αλλάξετε το μέγεθος της εικόνας
Πώς να διαβάσετε και να αλλάξετε το μέγεθος της εικόνας

cv2.imread () σας επιτρέπει να διαβάσετε την εικόνα. Μια σημαντική σκέψη που πρέπει να έχετε κατά νου είναι ότι η τοποθεσία της εικόνας σας πρέπει να βρίσκεται στον ίδιο φάκελο όπου είναι αποθηκευμένο το πρόγραμμα. Θα βάλουμε το βρόχο while γιατί θα πρέπει να τρέξει μέχρι να διαβάσει την εικόνα ή μπορούμε να πούμε μέχρι να ισχύει η συνθήκη

img = cv2.imread ("ferrari.jpg")

  • Σε αυτό έχω δημιουργήσει ένα μεταβλητό όνομα "img" στο οποίο αποθηκεύω την εικόνα
  • Μέσα στο cv2.imread γράψτε το όνομα της εικόνας με την επέκτασή της στο διπλό απόσπασμα

Για να αλλάξετε το μέγεθος μιας εικόνας θα χρησιμοποιήσουμε τη συνάρτηση cv2.resize. Αυτό το μέρος είναι προαιρετικό, αν θέλετε να αλλάξετε το μέγεθος, μπορείτε να χρησιμοποιήσετε αυτήν τη λειτουργία

Μέσα στο cv2.resize γράψτε πρώτα το όνομα της μεταβλητής στο οποίο είναι αποθηκευμένη η εικόνα και μετά το πλάτος και το ύψος της

Βήμα 5: Ανάγνωση τιμών γραμμής κομματιού για να το εφαρμόσετε σε μια εικόνα

Ανάγνωση τιμών γραμμής κομματιών για να το εφαρμόσετε σε μια εικόνα
Ανάγνωση τιμών γραμμής κομματιών για να το εφαρμόσετε σε μια εικόνα
Ανάγνωση τιμών γραμμής κομματιών για να το εφαρμόσετε σε μια εικόνα
Ανάγνωση τιμών γραμμής κομματιών για να το εφαρμόσετε σε μια εικόνα

Εντάξει, τώρα θα διαβάσουμε τις τιμές της γραμμής γραμμής, ώστε να μπορούμε να την εφαρμόσουμε στην εικόνα μας. Θα λάβουμε τις τιμές χρησιμοποιώντας τη συνάρτηση cv2.getTrackbarPos ().

Ας ξεκινήσουμε με αυτό το κομμάτι…

h_min = cv2.getTrackbarPos ("Hue min", "TrackBars")

Στην παραπάνω δήλωση δημιουργώ ένα όνομα μεταβλητής h_min στην οποία θα αποθηκεύσω την τιμή του Hue min. Έτσι, μέσα στο cv2.getTrackbarPos το 1ο όρισμα θα ήταν "Hue min" επειδή θέλω τιμές της απόχρωσης min (Η ορθογραφία πρέπει να είναι ακριβώς η ίδια με τη συνάρτηση createTrackbar) και το 2ο όρισμα θα είναι το όνομα του παραθύρου της γραμμής παρακολούθησης στο οποίο ανήκει.

  • Επαναλάβετε την ίδια διαδικασία για το h_max και τις υπόλοιπες λειτουργίες όπως φαίνεται στην παραπάνω εικόνα και, στη συνέχεια, εκτυπώστε όλες τις τιμές χρησιμοποιώντας την εκτύπωση ()
  • Η έξοδος εμφανίζεται στη δεύτερη εικόνα. Εκτυπώνει τις τιμές των h_min, h_max, s_min, s_max, v_min, s_max

Βήμα 6: Εμφάνιση εικόνας και ρύθμιση άνω και κάτω ορίου

Εμφάνιση εικόνας και ρύθμιση άνω και κάτω ορίου
Εμφάνιση εικόνας και ρύθμιση άνω και κάτω ορίου

Τώρα έχουμε την ελάχιστη και μέγιστη τιμή της απόχρωσης, του κορεσμού και της τιμής, θα χρησιμοποιήσουμε αυτήν την τιμή για να φιλτράρουμε την εικόνα, ώστε να μπορέσουμε να δώσουμε τη συγκεκριμένη έγχρωμη έξοδο μιας εικόνας.

Θα δημιουργήσουμε μια μάσκα για αυτό χρησιμοποιώντας τη συνάρτηση cv2.inRange. Και πριν από αυτό θα θέσουμε το ανώτερο και το κάτω όριο της απόχρωσης, του κορεσμού και της τιμής

Δημιουργήστε λοιπόν ένα όνομα μεταβλητής "κάτω" και χρησιμοποιώντας τη λειτουργία numpy array ορίστε το εύρος του min και για τα 3 ως εξής

κάτω = np.array ([h_min, s_min, v_min])

Επαναλάβετε το ίδιο βήμα για το επάνω μέρος

επάνω = np.array ([h_max, s_max, v_max])

Τώρα θα δημιουργήσουμε μια μάσκα ως εξής

mask = cv2.inRange (αλλαγή μεγέθους, κάτω, επάνω) Μέσα στο cv2.inRang το 1ο όρισμα θα ήταν η μεταβλητή στην οποία είναι αποθηκευμένη η τελική μου εικόνα, το 2ο όρισμα θα είναι κάτω όριο και το τρίτο όρισμα θα είναι ανώτερο όριο.

Τώρα θα εμφανίσουμε την κύρια εικόνα και τη μάσκα. Για προβολή θα χρησιμοποιήσουμε τη συνάρτηση cv2.imshow ()

cv2.imshow ("img", αλλαγή μεγέθους) Αυτό είναι για να εμφανιστεί η κύρια εικόνα. Το 1ο όρισμα είναι το όνομα του παραθύρου που μπορείτε να δώσετε όποιο όνομα θέλετε και το 2ο όρισμα είναι μεταβλητό στο οποίο αποθηκεύεται η κύρια εικόνα μου την οποία θέλετε να εμφανίσετε.

Ομοίως επαναλάβετε τα βήματα για τη μάσκα

cv2.imshow ("Έξοδος", μάσκα)

Βήμα 7: Τώρα το Τελικό Βήμα

Τώρα το Τελικό Βήμα
Τώρα το Τελικό Βήμα

Σε αυτό το τελευταίο βήμα θα εξάγουμε το χρώμα του αυτοκινήτου και της οθόνης.

Έχω δημιουργήσει ένα αποτέλεσμα ονόματος μεταβλητής. Μπορείτε και πάλι να δώσετε όποιο όνομα θέλετε. Θα χρησιμοποιήσουμε λοιπόν τη συνάρτηση cv2.bitwise_and () στην οποία θα προσθέσουμε εικόνες μαζί και θα δημιουργήσουμε μια νέα εικόνα. Και όπου υπάρχουν τα εικονοστοιχεία και στις δύο εικόνες, θα θεωρείται ότι ναι ή "1".

αποτέλεσμα = cv2.bitwise_and (αλλαγή μεγέθους, αλλαγή μεγέθους, μάσκα = μάσκα)

  • Σε αυτό το 1ο όρισμα θα είναι η εικόνα μας
  • Το 2ο όρισμα θα είναι επίσης η αρχική μας εικόνα, αλλά θα ακολουθήσει η μάσκα που εφαρμόσαμε την οποία δημιουργήσαμε πριν
  • Και τέλος απλώς εμφανίστε το αποτέλεσμα χρησιμοποιώντας τη λειτουργία απεικόνισης

Απλώς αντιγράψτε επικόλληση αυτό το τελευταίο βήμα είναι απλώς μια καθυστέρηση και μπορείτε να βγείτε από το παράθυρο εξόδου πατώντας "a" στο πληκτρολόγιο

Βήμα 8: Τελικές εκροές

Συνιστάται: