- Τι είναι οι εικόνες;
- Πώς ο υπολογιστής αποθηκεύει εικόνες
- Γιατί είναι δύσκολο για μια μηχανή να αναγνωρίσει εικόνες
- Εφαρμογή και χρήσεις του OpenCV
- Εγκατάσταση του OpenCV με Python και Anaconda
- Άνοιγμα και αποθήκευση εικόνων στο OpenCV
- Γκρι κλιμάκωση εικόνας στο OpenCV
- Χρώματα
- Εξερεύνηση μεμονωμένων στοιχείων της εικόνας RGB
- Μετατροπή εικόνας σε μεμονωμένο στοιχείο RGB
- Ιστόγραμμα Αναπαράσταση εικόνας
- Σχεδίαση εικόνων και σχημάτων χρησιμοποιώντας το OpenCV
Η τέχνη είναι ένας τρόπος να βλέπεις, και λένε ότι το να βλέπεις πιστεύει, αλλά το αντίθετο ισχύει επίσης, το να πιστεύεις ότι βλέπεις και είναι πραγματικά δύσκολο να φανταστείς ότι ζεις σε αυτόν τον κόσμο χωρίς το δώρο της όρασης - τα μάτια μας, πόσο υπέροχο είναι ένα βρέφος όταν τα μάτια μας ανοίγουν, βλέπουμε τον κόσμο και άρχισε να αναγνωρίζει και να βλέπει τον κόσμο γύρω μας, αλλά καθώς περνά ο καιρός, η ίδια υπέροχη εμπειρία γίνεται μια κοσμική. Αλλά καθώς προχωρούμε με την τεχνολογία βρισκόμαστε στα πρόθυρα όπου οι μηχανές μπορούν επίσης να την δουν και να την κατανοήσουν. Προς το παρόν, δεν φαίνεται να είναι μια sci-fi αν ξεκλειδώσετε το τηλέφωνό σας με το πρόσωπό σας, αλλά η ιστορία της ανάπτυξης του μηχανικού οράματος χρονολογείται εδώ και πολύ καιρό πάνω από 20 χρόνια.
Το αρχικό επίσημο βήμα σε αυτόν τον τομέα πραγματοποιήθηκε το 1999 σε μια πρωτοβουλία Intel, όταν όλη η έρευνα που διεξήχθη συνεργάστηκε στο πλαίσιο του OPEN CV (Open Source computer vision), αρχικά γραμμένο στο C ++, με την πρώτη μεγάλη κυκλοφορία του 1.0 το 2006 δεύτερο το 2009, τρίτο το 2015 και τέταρτο μόλις τώρα στο 2018. Τώρα το OpenCV διαθέτει διεπαφές C ++, Python και Java και υποστηρίζει Windows, Linux, Mac OS, iOS και Android. Έτσι μπορεί να εγκατασταθεί εύκολα στο Raspberry Pi με περιβάλλον Python και Linux. Και το Raspberry Pi με OpenCV και συνδεδεμένη κάμερα μπορούν να χρησιμοποιηθούν για τη δημιουργία πολλών εφαρμογών επεξεργασίας εικόνας σε πραγματικό χρόνο, όπως Ανίχνευση προσώπου, κλείδωμα προσώπου, παρακολούθηση αντικειμένων, ανίχνευση πινακίδας αυτοκινήτου, σύστημα οικιακής ασφάλειας κλπ
Πριν ξεκινήσετε να μάθετε την επεξεργασία εικόνων χρησιμοποιώντας το openCV, είναι σημαντικό να γνωρίζετε ποιες είναι οι εικόνες και πώς οι άνθρωποι και οι μηχανές αντιλαμβάνονται αυτές τις εικόνες.
Τι είναι οι εικόνες;
Οι εικόνες είναι μια δισδιάστατη αναπαράσταση του φάσματος ορατού φωτός. Και το φάσμα ορατού φωτός είναι απλώς ένα μέρος του ηλεκτρομαγνητικού φάσματος που βρίσκεται εκεί ανάμεσα στο υπέρυθρο και το υπεριώδες φάσμα.
Πώς σχηματίζονται οι εικόνες: - όταν ένα φως αντανακλά ένα αντικείμενο σε μια ταινία, έναν αισθητήρα ή στον αμφιβληστροειδή.
Έτσι λειτουργούν τα μάτια μας, χρησιμοποιώντας ένα φράγμα για να εμποδίσουμε το μεγαλύτερο σημείο των φώτων αφήνοντας ένα μικρό άνοιγμα μέσα από το οποίο μπορεί να περάσει το φως, ονομάζεται διάφραγμα και σχηματίζει μια πολύ εστιασμένη εικόνα και είναι ένα μοντέλο εργασίας για μια κάμερα με οπές pin, αλλά υπάρχει ένα πρόβλημα σε μια κάμερα με τρύπες, ότι η ίδια ποσότητα φωτός θα εισέλθει στο διάφραγμα, το οποίο δεν θα μπορούσε να είναι κατάλληλο για τη μεμβράνη ή την εικόνα που σχηματίζεται και δεν μπορούμε να πάρουμε μια εστιασμένη εικόνα, έτσι ώστε να εστιάσουμε την εικόνα πρέπει να μετακινήσετε την ταινία πίσω και πίσω, αλλά αυτό είναι προβληματικό σε πολλές περιπτώσεις.
Ή μπορούμε να διορθώσουμε αυτό το πρόβλημα χρησιμοποιώντας φακούς, μας επιτρέπει να ελέγξουμε το μέγεθος του διαφράγματος και στη φωτογραφία είναι γνωστό ως f Stop, γενικά χαμηλότερη η τιμή του f Stop είναι καλύτερη στη φωτογραφία.
Το μέγεθος του διαφράγματος μας επιτρέπει επίσης να μπαίνουμε σε ωραίο βάθος πεδίου που ονομάζεται Bokeh στη φωτογραφία, μας επιτρέπει να έχουμε θολή φόντο ενώ εστιάζουμε στην εικόνα.
Πώς ο υπολογιστής αποθηκεύει εικόνες
Μπορεί να έχετε ακούσει διάφορες μορφές εικόνας όπως.png,.jpgG κ.λπ. όλα αυτά είναι ψηφιακή αναπαράσταση του αναλογικού μας κόσμου, οι υπολογιστές το κάνουν μεταφράζοντας την εικόνα σε ψηφιακό κώδικα για αποθήκευση και μετά ερμηνεύστε το αρχείο σε εικόνα για απεικόνιση. Αλλά στα βασικά χρησιμοποιούν μια κοινή πλατφόρμα για την αποθήκευση των εικόνων, και το ίδιο ισχύει και για το openCV.
Το OpenCV χρησιμοποιεί από προεπιλογή RGB (κόκκινο, πράσινο και μπλε) χρωματικό χώρο για τις εικόνες του, όπου κάθε συντεταγμένη pixel (x, y) περιέχει 3 τιμές που κυμαίνονται για εντάσεις σε μορφή 8-bit, δηλαδή (0-255, 2 8).
Η ανάμιξη διαφορετικών εντάσεων κάθε χρώματος μας δίνει το πλήρες φάσμα, γι 'αυτό στη ζωγραφική ή στην τέχνη αυτά τα τρία χρώματα θεωρούνται ως πρωτεύοντα χρώματα και όλα τα άλλα ως δευτερεύοντα, επειδή τα περισσότερα από τα δευτερεύοντα χρώματα μπορούν να σχηματιστούν από πρωτεύοντα χρώματα. Όπως για το κίτρινο, έχουμε τις ακόλουθες τιμές: Κόκκινο - 255; Πράσινο - 255; Μπλε - 0.
Τώρα οι εικόνες αποθηκεύονται σε πολυδιάστατες συστοιχίες. Στον προγραμματισμό, ο πίνακας είναι μια σειρά συλλογής αντικειμένων. Και εδώ ασχολούμαστε με τρεις τύπους συστοιχιών 1D, 2D και 3D όπου το "D" σημαίνει διαστατικό.
Οι έγχρωμες εικόνες αποθηκεύονται σε τρισδιάστατες συστοιχίες, όπου η τρίτη διάσταση αντιπροσωπεύει τα χρώματα RGB (τα οποία θα δούμε αργότερα) και μαζί σχηματίζουν διαφορετικές εντάσεις pixel για μια εικόνα, ενώ οι ασπρόμαυρες εικόνες αποθηκεύονται σε δισδιάστατες συστοιχίες. και επίσης υπάρχουν δύο τύποι ασπρόμαυρων εικόνων κλίμακα του γκρι και δυαδικές εικόνες.
Οι εικόνες σε κλίμακα του γκρι σχηματίζονται από τις αποχρώσεις του γκρι μιας δισδιάστατης συστοιχίας, ενώ οι δυαδικές εικόνες είναι εικονοστοιχείων είτε μαύρου είτε λευκού.
Γιατί είναι δύσκολο για μια μηχανή να αναγνωρίσει εικόνες
Η όραση του υπολογιστή είναι μια πρόκληση από μόνη της, μπορείτε να φανταστείτε πόσο δύσκολο είναι να δώσετε μια μηχανή αίσθηση όρασης, αναγνώρισης και ταυτοποίησης. Υπάρχουν οι παρακάτω παράγοντες που κάνουν την όραση του υπολογιστή τόσο δύσκολη.
- Περιορισμοί αισθητήρα και φακού κάμερας
- Προβολή παραλλαγών σημείου
- Αλλαγή φωτισμού
- Απολέπιση
- Αποφράξεις
- Παραλλαγές κλάσης αντικειμένων
- Ασαφείς εικόνες / οπτικές ψευδαισθήσεις
Εφαρμογή και χρήσεις του OpenCV
Παρά τη δυσκολία, το Computer Vision έχει πολλές ιστορίες επιτυχίας
- Ρομποτική Πλοήγηση - Αυτοκίνητα Αυτοκινήτου
- Ανίχνευση & αναγνώριση προσώπου
- Αναζήτηση εικόνων μηχανών αναζήτησης
- Ανάγνωση πινακίδας κυκλοφορίας
- Αναγνώριση χειρογράφου
- Φίλτρα Snapchat & Face
- Αναγνώριση αντικειμένων
- Παρακολούθηση σφαιρών και παικτών στον αθλητισμό
- Και πολλά άλλα!
Εγκατάσταση του OpenCV με Python και Anaconda
Το OpenCV είναι γραμμένο σε C ++, αλλά είναι πολύ δύσκολο να το υλοποιήσουμε με το C ++ και ως εκ τούτου επιλέγουμε να το εφαρμόσουμε με γλώσσα υψηλού επιπέδου ως python, και επίσης υπάρχουν πρόσθετα οφέλη από την εφαρμογή του OpenCV με το python καθώς το Python είναι μία από τις ευκολότερες γλώσσες Για αρχάριους επίσης Είναι εξαιρετικά ισχυρό για εφαρμογές επιστήμης δεδομένων και μηχανικής εκμάθησης και επίσης αποθηκεύει εικόνες σε συστοιχίες numpy που μας επιτρέπουν να κάνουμε μερικές πολύ ισχυρές λειτουργίες αρκετά εύκολα.
Ο βασικός προγραμματισμός είναι χρήσιμος με το Exposure to High School Level Math, μια κάμερα web, Python 2.7 ή 3.6 (προτιμάται το πακέτο Anaconda).
Βήμα 1. Λήψη και εγκατάσταση του πακέτου Anaconda Python
Μεταβείτε στη διεύθυνση: https://www.anaconda.com/download και επιλέξτε ανάλογα με τον καιρό του μηχανήματός σας τα παράθυρα, το Linux ή το mac και μπορείτε να επιλέξετε την έκδοση python 2.7 ή python 3.7 είτε για συστήματα 64 bit είτε για συστήματα 32 bit, αλλά τώρα μέρες το μεγαλύτερο μέρος του συστήματος είναι 64 bit.
Η διανομή του python της Anaconda συνοδεύεται από το στούντιο Spyder, τα σημειωματάρια jupyter και το anaconda prompt, γεγονός που καθιστά το python εξαιρετικά φιλικό στη χρήση. Θα χρησιμοποιούσαμε το spyder studio για να κάνουμε τα παραδείγματα.
Η επιλογή μεταξύ python 2.7 ή 3.7 είναι εντελώς ουδέτερη, αλλά ωστόσο για τα παραδείγματα θα χρησιμοποιούσαμε το python 3.7 δεδομένου ότι είναι το μέλλον του python και θα αναλάβει το python 2.7 από το 2020, επίσης, οι περισσότερες βιβλιοθήκες αναπτύσσονται στο python 3.7 τη μελλοντική πτυχή του πύθωνα. Επίσης, δίνει επίσης τα αναμενόμενα αποτελέσματα σε βασικές μαθηματικές λειτουργίες όπως (2/5 = 2.5), ενώ ο πύθωνας 2.7 θα το αξιολογούσε σε 2. Επίσης, η εκτύπωση αντιμετωπίζεται ως συνάρτηση στο πύθωνα 3.7 (εκτύπωση («γεια»)), έτσι δίνει πρακτικά στους προγραμματιστές.
Βήμα 2. Δημιουργία εικονικής πλατφόρμας με το OpenCV
Πρόκειται να εγκαταστήσουμε το OpenCV δημιουργώντας μια εικονική πλατφόρμα για spyder χρησιμοποιώντας το μήνυμα Anaconda και το αρχείο YML που ανεβάσατε εδώ.
Με τα αρχεία YML θα εγκαταστήσουμε όλα τα πακέτα και τις βιβλιοθήκες που θα χρειαζόμασταν, αλλά αν θέλετε να εγκαταστήσετε τυχόν πρόσθετα πακέτα, μπορείτε εύκολα να εγκαταστήσετε μέσω του anaconda prompt, εκτελώντας την εντολή αυτού του πακέτου.
Μεταβείτε στο εικονίδιο αναζήτησης των παραθύρων σας και βρείτε το τερματικό προτροπής του anaconda, μπορείτε να το βρείτε μέσα στο φάκελο anaconda που μόλις εγκαταστήσατε.
Στη συνέχεια, πρέπει να βρείτε το αρχείο YML που έχετε κατεβάσει και από εδώ έχετε δύο επιλογές είτε να αλλάξετε τον κατάλογο του τερματικού σας στη θέση λήψης του αρχείου YML είτε να αντιγράψετε το αρχείο YML στον κατάλογο όπου είναι εγκατεστημένο το anaconda περιπτώσεις θα ήταν μέσα στο C: \ drive, μετά την αντιγραφή του αρχείου YML στην καθορισμένη θέση. Εκτελέστε την ακόλουθη εντολή στη γραμμή εντολών σας
conda env create –f virtual_platform_windows.yml
Δεδομένου ότι το σύστημά μου λειτουργεί σε παράθυρα, το αρχείο YML και η εντολή αντιστοιχεί στα παράθυρα, ωστόσο μπορείτε να τροποποιήσετε ανάλογα με το σύστημά σας, αντικαθιστώντας τα παράθυρα από linux ή mac ως αντίστοιχα.
Σημείωση: - Εάν η εξαγωγή πακέτου δίνει σφάλμα, εγκαταστήστε πρώτα το pytorch και το numpy και, στη συνέχεια, εκτελέστε την παραπάνω εντολή.
Τώρα βρείτε το πρόγραμμα πλοήγησης anaconda και θα υπήρχε ένα αναπτυσσόμενο μενού "Εφαρμογές σε ___" και από εκεί επιλέξτε εικονικό περιβάλλον και στη συνέχεια από εκεί πρέπει να ξεκινήσετε το Spyder studio.
Και αυτό είναι, είστε έτοιμοι να ξεκινήσετε!
Άνοιγμα και αποθήκευση εικόνων στο OpenCV
Εδώ εξηγούμε μερικές βασικές εντολές και ορολογία για τη χρήση του Python στο OpenCV. Θα μάθουμε για τρεις βασικές λειτουργίες στο OpenCV imread, imshow και imwrite.
#comments στο python δίνονται με το σύμβολο #
Εισαγωγή opencv στο python με εντολή
εισαγωγή cv2
Φορτώστε μια εικόνα χρησιμοποιώντας το "imread" καθορίζοντας τη διαδρομή προς την εικόνα
image = cv2.imread ('input.jpg')
Τώρα αυτή η εικόνα φορτώνεται και αποθηκεύεται στο python ως μεταβλητή που ονομάσαμε ως εικόνα
Τώρα για να εμφανιστεί η μεταβλητή εικόνας μας, χρησιμοποιούμε το «imshow» και η πρώτη παράμετρος για τη λειτουργία imshow είναι ο τίτλος που εμφανίζεται στο παράθυρο της εικόνας και πρέπει να εισαχθεί στο (») για να αναπαριστά το όνομα ως συμβολοσειρά
cv2.imshow («γειά σου κόσμος», εικόνα)
Τοkeykey μας επιτρέπει να εισάγουμε πληροφορίες όταν το παράθυρο της εικόνας είναι ανοιχτό, αφήνοντάς το κενό, περιμένει απλώς να πατηθεί οποιοδήποτε πλήκτρο πριν συνεχίσει, τοποθετώντας αριθμούς (εκτός του 0), μπορούμε να καθορίσουμε μια καθυστέρηση για πόσο καιρό διατηρείτε το παράθυρο ανοιχτό σε χιλιοστά του δευτερολέπτου εδώ).
cv2.waitKey ()
Το 'destrAllWindows' κλείνει όλα τα ανοιχτά παράθυρα, η αποτυχία τοποθέτησής του θα αναγκάσει το πρόγραμμά σας να "κολλήσει".
cv2.destroyAllWindows ()
, για αυτό θα χρησιμοποιήσουμε το numpy, το numpy είναι μια βιβλιοθήκη για προγραμματισμό python για προσθήκη υποστήριξης σε μεγάλες πολυδιάστατες συστοιχίες και πίνακες.
cv2 εισαγωγή #importing NumPy εισαγωγής NumPy ως NP εικόνα = cv2.imread («input.jpg») cv2.imshow («hello_world», εικόνα) #shape η λειτουργία είναι πολύ χρήσιμη όταν εξετάζουμε ένα διαστάσεις ενός πίνακα, το επιστρέφει μια πλειάδα που δίνει μια διάσταση εκτύπωσης εικόνας (image.shape) cv2.waitKey () cv2.destroyAllWindows ()
Έξοδος κονσόλας - (183, 275, 3), Οι δύο διαστάσεις της εικόνας έχουν ύψος 183 εικονοστοιχεία και πλάτος 275 εικονοστοιχεία και 3 σημαίνει ότι υπάρχουν τρία άλλα στοιχεία (R, G, B) που δημιουργούν αυτήν την εικόνα (δείχνει ότι οι έγχρωμες εικόνες αποθηκεύονται σε τρισδιάστατες συστοιχίες).
εκτύπωση ('Ύψος εικόνας:', (image.shape, 'pixels')) print ('Πλάτος εικόνας:', (image.shape, 'pixels'))
Έξοδος κονσόλας - Ύψος εικόνας: (183, 'pixels')
Πλάτος εικόνας: (275, 'pixels')
Αποθήκευση της επεξεργασμένης εικόνας στο OpenCV
Χρησιμοποιούμε το «imwrite» για τον καθορισμό του ονόματος αρχείου και της εικόνας που θα αποθηκευτεί.
cv2.imwrite ('output.jpg', εικόνα) cv2.imwrite ('output.png', εικόνα)
Το πρώτο όρισμα είναι το όνομα του αρχείου που θέλουμε να αποθηκεύσουμε, {για ανάγνωση ή αποθήκευση του αρχείου που χρησιμοποιούμε ('') για να το υποδείξουμε ως συμβολοσειρά} και το δεύτερο όρισμα είναι το όνομα του αρχείου.
Το OpenCV σας επιτρέπει να αποθηκεύσετε την εικόνα σε διαφορετικές μορφές.
Γκρι κλιμάκωση εικόνας στο OpenCV
Greyscaling είναι η διαδικασία με την οποία μια εικόνα μετατρέπεται από πλήρες χρώμα σε αποχρώσεις του γκρι (μαύρο και άσπρο)
Στο opencv, πολλές λειτουργίες κλιμακώνουν τις εικόνες πριν από την επεξεργασία. Αυτό γίνεται επειδή απλοποιεί την εικόνα, ενεργώντας σχεδόν ως μείωση θορύβου και αυξάνοντας τον χρόνο επεξεργασίας, καθώς υπάρχουν λιγότερες πληροφορίες στην εικόνα (καθώς οι εικόνες κλίμακας του γκρι αποθηκεύονται σε δισδιάστατες συστοιχίες).
εισαγωγή cv2 # φόρτωση εικόνας εικόνας εισόδου μας = cv2.imread ('input.jpg') cv2.imshow ('original', image) cv2.waitKey () # χρησιμοποιούμε cvtcolor, για να μετατρέψουμε σε κλίμακα γκρι γκρι = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale', gray_image) cv2.waitKey () cv2.destroyALLWindows ()
Ο απλούστερος τρόπος μετατροπής της εικόνας σε κλίμακα του γκρι είναι απλώς να προσθέσετε το όρισμα 0 στη συνάρτηση imread εκτός από το όνομα της εικόνας
εισαγωγή cv2 grey_image = cv2.imread ('input.jpg', 0) cv2.imshow ('grayscale', grey_image) cv2.waitKey () cv2.destroyAllWindows ()
import cv2 import numpy as np image = cv2.imread ('input.jpg') print (image.shape) cv2.imshow ('original', image) cv2.waitKey () gray_image = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale', gray_image) print (gray_image.shape) cv2.waitKey () cv2.destroyALLWindows ()
Έξοδος κονσόλας: - (183, 275, 3) - για έγχρωμη εικόνα
(183, 275) - για εικόνα σε κλίμακα του γκρι
Ως εκ τούτου, δείχνει ξεκάθαρα ότι οι έγχρωμες εικόνες αντιπροσωπεύονται από τρισδιάστατες συστοιχίες, ενώ οι γκρι κλίμακες εικόνες από δύο διαστάσεις συστοιχίες.
Χρώματα
Οι χρωματικοί χώροι είναι ο τρόπος αποθήκευσης των εικόνων. Τα RGB, HSV, CMYK είναι οι διαφορετικοί χρωματικοί χώροι, αυτοί είναι απλοί τρόποι αναπαραγωγής του χρώματος.
RGB - Κόκκινο, Πράσινο και Μπλε.
HSV - Απόχρωση, κορεσμός και τιμή.
Και το CMYK χρησιμοποιείται συνήθως σε εκτυπωτές inkjet.
Χώρος χρώματος RGB ή BGR
Ο προεπιλεγμένος χρωματικός χώρος του OpenCV είναι RGB. Το RGB είναι ένα πρόσθετο χρωματικό μοντέλο που δημιουργεί χρώματα συνδυάζοντας μπλε, πράσινο και κόκκινο χρώμα διαφορετικών εντάσεων / φωτεινότητας. Στο OpenCV χρησιμοποιούμε βάθη χρώματος 8 bit.
- Κόκκινο (0-255)
- Μπλε (0-255)
- Πράσινο (0-255)
Ωστόσο, το OpenCV αποθηκεύει πραγματικά χρώμα σε μορφή BGR.
Fun Fact: - Χρησιμοποιούμε παραγγελία BGR σε υπολογιστές λόγω του τρόπου με τον οποίο οι μη υπογεγραμμένοι ακέραιοι 32-bit αποθηκεύονται στη μνήμη, καταλήγει να αποθηκεύεται ως RGB. Ο ακέραιος αριθμός που αντιπροσωπεύει ένα χρώμα π.χ.: - 0X00BBGGRR θα αποθηκευτεί ως 0XRRGGBB.
Χρώμα χώρου HSVΤο HSV (Απόχρωση, Κορεσμός & τιμή / Φωτεινότητα) είναι ένας χρωματικός χώρος που προσπαθεί να αντιπροσωπεύσει τα χρώματα που το αντιλαμβάνονται οι άνθρωποι. Αποθηκεύει πληροφορίες χρώματος σε κυλινδρική αναπαράσταση σημείων χρώματος RGB.
Απόχρωση - τιμή χρώματος (0-179)
Κορεσμός - Ζωτικότητα χρώματος (0-255)
Τιμή - Φωτεινότητα ή ένταση (0-255)
Η μορφή χρώματος χώρου HSV είναι χρήσιμη στην τμηματοποίηση χρωμάτων. Σε RGB, το φιλτράρισμα συγκεκριμένου χρώματος δεν είναι εύκολο, ωστόσο το HSV καθιστά πολύ πιο εύκολο να ορίσετε εύρη χρωμάτων για να φιλτράρετε συγκεκριμένο χρώμα καθώς τα αντιλαμβανόμαστε.
Η απόχρωση αντιπροσωπεύει το χρώμα σε HSV, η τιμή απόχρωσης κυμαίνεται από 0 - 180 και όχι 360, οπότε δεν ολοκληρώνει τον πλήρη κύκλο και έτσι χαρτογραφείται διαφορετικά από το τυπικό.
Φίλτρα εύρους χρωμάτων
- Κόκκινο - (165-15)
- Πράσινο - (45-75)
- Μπλε - (90-120)
Όπως γνωρίζουμε ότι οι εικόνες αποθηκεύονται σε χρωματικό χώρο RGB (Κόκκινο, Πράσινο και Μπλε) και έτσι το OpenCV μας δείχνει το ίδιο, αλλά το πρώτο πράγμα που πρέπει να θυμόμαστε σχετικά με τη μορφή RGB του opencv είναι ότι είναι στην πραγματικότητα BGR και μπορούμε να το γνωρίζουμε κοιτάζοντας το σχήμα εικόνας.
import cv2 import numpy as np image = cv2.imread ('input.jpg') # B, G, R τιμή για την πρώτη εκτύπωση 0,0 pixel B, G, R = εκτύπωση εικόνας (B, G, R) (εικόνα.shape) #now αν ισχύει αυτό σε κλίμακα του γκρι εικόνα gray_img = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY) print gray_img.shape () τιμή pixel #gray_image για 10,50 pixel εκτύπωσης (gray_img)
Έξοδος κονσόλας: εκτύπωση (B, G, R) - 6 11 10
εκτύπωση (image.shape) - (183, 275, 3)
εκτύπωση (grey_img.shape) - (183, 275)
εκτύπωση (grey_img) - 69
Τώρα υπάρχουν μόνο δύο διαστάσεις σε μια εικόνα κλίμακας γκρι, αφού θυμόμαστε ότι η έγχρωμη εικόνα αποθηκεύεται σε τρεις διαστάσεις, η τρίτη διάσταση είναι η (R, G, B) ενώ σε κλίμακα του γκρι υπάρχουν μόνο δύο διαστάσεις, αφού (R, G, B) απουσιάζει και για μια συγκεκριμένη θέση pixel παίρνουμε μόνο μία τιμή, ενώ σε έγχρωμη εικόνα έχουμε τρεις τιμές.
Ένας άλλος χρήσιμος χρωματικός χώρος είναι ο HSV
εισαγωγής cv2 εικόνα = cv2.imread ('input.jpg') hsv_image = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2HSV) cv2.imshow ('HSV εικόνας', hsv_image) cv2.imshow ('κανάλι Hue', hsv_image) CV2. imshow («κανάλι κορεσμού», hsv_image) cv2.imshow («κανάλι αξίας», hsv_image) cv2.waitKey () cv2.destroyAllWindows ()
Αφού εκτελέσετε τον κωδικό, μπορείτε να δείτε τις τέσσερις εικόνες από τις οποίες τρεις είναι μεμονωμένα κανάλια και μία συνδυασμένη εικόνα HSV.
Η εικόνα του καναλιού Hue είναι αρκετά σκοτεινή επειδή η τιμή της κυμαίνεται μόνο από 0 έως 180.
Επίσης, σημειώστε ότι η λειτουργία imshow προσπαθεί να σας δείξει την εικόνα RGB ή BGR, αλλά η μετατροπή HSV την επικαλύπτει.
Επίσης, το κανάλι αξίας θα είναι παρόμοιο με το κλίμακα του γκρι της εικόνας λόγω της φωτεινότητας του.
Εξερεύνηση μεμονωμένων στοιχείων της εικόνας RGB
εισαγωγή cv2 image = cv2.imread ('input.jpg') # η συνάρτηση split του opencv χωρίζει το imageinti κάθε δείκτη χρώματος B, G, R = cv2.split (εικόνα) cv2.imshow ("Κόκκινο", R) cv2.imshow ("Green", G) cv2.imshow ("Blue", B) #making την αρχική εικόνα συγχωνεύοντας τα μεμονωμένα χρωματικά στοιχεία συγχωνευμένα = cv2.merge () cv2.imshow ("συγχωνευμένο", συγχωνευμένο) # ενίσχυση του συγχωνευμένου μπλε χρώματος = cv2.merge () cv2.imshow ("συγχωνεύτηκε με μπλε ενίσχυση", συγχωνεύτηκε) # αναπαριστώντας το σχήμα των μεμονωμένων χρωματικών στοιχείων. # η έξοδος θα είναι μόνο δύο διαστάσεις με ύψος και πλάτος, καθώς το τρίτο στοιχείο του στοιχείου RGB αντιπροσωπεύεται μεμονωμένα εκτύπωση (B.shape) εκτύπωσης (R.σχήμα) εκτύπωση (G.shape) cv2.waitKey (0) cv2.destroyAllWindows ()
Έξοδος κονσόλας: # διαστάσεις εικόνας από τη λειτουργία σχήματος
(183, 275)
(183, 275)
(183, 275)
Μετατροπή εικόνας σε μεμονωμένο στοιχείο RGB
Στον παρακάτω κώδικα έχουμε δημιουργήσει έναν πίνακα μηδενικών με τις διαστάσεις της εικόνας HxW, μηδενική επιστροφή ενός πίνακα γεμάτου με μηδενικά αλλά με τις ίδιες διαστάσεις.
Η λειτουργία σχήματος είναι πολύ χρήσιμη όταν εξετάζουμε τη διάσταση μιας εικόνας και εδώ έχουμε κάνει τεμαχισμό αυτής της λειτουργίας σχήματος. Έτσι, το σχήμα θα έπαιρνε τα πάντα μέχρι καθορισμένα σημεία, δηλαδή έως τα δευτερόλεπτα καθορισμένα σημεία που θα ήταν ύψος και πλάτος της εικόνας, καθώς το τρίτο αντιπροσωπεύει RGB στοιχείο της εικόνας και δεν το χρειαζόμαστε εδώ.
import cv2 import numpy as np image = cv2.imread ('input.jpg') B, G, R = cv2.split (image) μηδενικά = np.zeros (image.shape, dtype = "uint8") cv2.imshow ("RED", cv2.merge ()) cv2.imshow ("Green", cv2.merge ()) cv2.imshow ("Blue", cv2.merge ()) cv2.waitKey (0) cv2.destroyAllWindows ()
Ιστόγραμμα Αναπαράσταση εικόνας
Η αναπαράσταση ιστογράμματος της εικόνας είναι η μέθοδος οπτικοποίησης των συστατικών των εικόνων.
Ο παρακάτω κώδικας σάς επιτρέπει να αναλύετε την εικόνα μέσω του χρωματικού ιστογράμματος των συνδυασμένων και μεμονωμένων χρωματικών στοιχείων.
cv2 εισαγωγής NumPy εισαγωγής NP #we ανάγκη να matplotlib την εισαγωγή για τη δημιουργία οικοπέδων ιστόγραμμα εισαγωγή matplotlib.pyplot όπως PLT εικόνα = cv2.imread ('input.jpg') ιστόγραμμα = cv2.calcHist (,, Κανένας,,) #we οικόπεδο ένα ιστόγραμμα, ravel () ισοπεδώνει τη σειρά εικόνων μας plt.hist (image.ravel (), 256,) plt.show () #viewing ξεχωριστά κανάλια χρώματος color = ('b', 'g', 'r') #we know διαχωρίστε το χρώμα και σχεδιάστε το καθένα σε ιστόγραμμα για i, col σε απαρίθμηση (χρώμα): histogram2 = cv2.calcHist (,, None,,) plt.plot (histogram2, color = col) plt.xlim () plt.show ()
Ας καταλάβουμε τη συνάρτηση calcHist με καθεμία από τις μεμονωμένες παραμέτρους της
cv2.calcHist (εικόνες, κανάλια, μάσκα, histize , εύρη)
Εικόνες: είναι η αρχική εικόνα του τύπου uint 8 ή float 32. Θα πρέπει να δίνεται σε αγκύλες, δηλ. "", Το οποίο επίσης υποδεικνύει τον πίνακα δεύτερου επιπέδου, καθώς μια εικόνα για το opencv είναι δεδομένα σε μορφή πίνακα.
Κανάλια: δίνεται επίσης σε αγκύλες. Είναι το ευρετήριο του καναλιού για το οποίο υπολογίζουμε το ιστόγραμμα, για παράδειγμα εάν η είσοδος είναι εικόνα σε κλίμακα του γκρι, η αξία της είναι, για έγχρωμες εικόνες που μπορείτε να περάσετε ή για να υπολογίσετε το ιστόγραμμα του μπλε, πράσινου και κόκκινου καναλιού αντίστοιχα.
Μάσκα: εικόνα μάσκας. για να βρείτε το ιστόγραμμα πλήρους εικόνας, δίνεται ως «κανένα». αλλά αν θέλετε να βρείτε το ιστόγραμμα συγκεκριμένης περιοχής εικόνας, πρέπει να δημιουργήσετε μια εικόνα μάσκας για αυτό και να την δώσετε ως μάσκα.
HISTize: Αυτό αντιπροσωπεύει τον αριθμό BIN. Πρέπει να δοθεί σε αγκύλες για πλήρη κλίμακα που περνάμε.
Ranges: Αυτή είναι η σειρά μας, συνήθως
Σχεδίαση εικόνων και σχημάτων χρησιμοποιώντας το OpenCV
Ακολουθούν μερικά παραδείγματα για τη σχεδίαση γραμμών, ορθογωνίων, πολυγώνων, κύκλων κ.λπ. στο OpenCV.
import cv2 import numpy as np #creating a black square image = np.zeros ((512,512,3), np.uint8) # μπορούμε επίσης να το δημιουργήσουμε σε ασπρόμαυρο, ωστόσο δεν θα υπήρχαν αλλαγές image_bw = np.zeros ((512,512), np.uint8) cv2.imshow ("μαύρο ορθογώνιο (χρώμα)", εικόνα) cv2.imshow ("μαύρο ορθογώνιο (B&W)", image_bw)
Γραμμή
# δημιουργήστε μια γραμμή πάνω από το μαύρο τετράγωνο # cv2.line (εικόνα, αρχικές συντεταγμένες, τελικές συντεταγμένες, χρώμα, πάχος) # σχεδιάζοντας μια διαγώνια γραμμή πάχους 5 pixel image = np.zeros ((512,512,3), np.uint8) cv2.line (εικόνα, (0,0), (511,511), (255,127,0), 5) cv2.imshow ("μπλε γραμμή", εικόνα)
Ορθογώνιο παραλληλόγραμμο
# δημιουργήστε ένα ορθογώνιο πάνω από ένα μαύρο τετράγωνο # cv2. ορθογώνιο (εικόνα, συντεταγμένες έναρξης, συντεταγμένες τερματισμού, χρώμα, πάχος) # σχεδίαση ενός ορθογωνίου πάχους 5 pixel image = np.zeros ((512,512,3), np.uint8) cv2. ορθογώνιο (εικόνα, (30,50), (100,150), (255,127,0), 5) cv2.imshow ("ορθογώνιο", εικόνα)
# δημιουργία ενός κύκλου πάνω από ένα μαύρο τετράγωνο # cv2.circle (εικόνα, κέντρο, ακτίνα, χρώμα, πλήρωση) image = np.zeros ((512,512,3), np.uint8) cv2.circle (εικόνα, (100,100), (50), (255,127,0), - 1) cv2.imshow ("κύκλος", εικόνα)
# δημιουργώντας μια εικόνα πολυγώνου = np.zeros ((512,512,3), np.uint8) #lets ορίζουν τέσσερα σημεία pts = np.array (,,,], np.int32) #let τώρα αναδιαμορφώνουν τα σημεία μας με τη μορφή που απαιτείται από polylines pts = pts.reshape ((- 1,1,2)) cv2 . polylines (εικόνα, True, (0,255,255), 3) cv2.imshow ("πολύγωνο", εικόνα)
#putting text using opencv # cv2.putText (εικόνα, "text to display", bootom αριστερό σημείο εκκίνησης, γραμματοσειρά, μέγεθος γραμματοσειράς, χρώμα, πάχος) image = np.zeros ((512,512,3), np.uint8) cv2. putText (εικόνα, "hello world", (75,290), cv2.FONT_HERSHEY_COMPLEX, 2, (100,170,0), 3) cv2.imshow ("hello world", εικόνα) cv2.waitKey (0) cv2.destroyAllWindows ()
Το Computer Vision και το OpenCV είναι πολύ μεγάλα θέματα που πρέπει να καλυφθούν, αλλά αυτός ο οδηγός θα ήταν καλό σημείο εκκίνησης για να μάθετε το OpenCV και την επεξεργασία εικόνων.