• Nenhum resultado encontrado

Κεφάλαιο 7 Συμπεράσματα

7.2 Μελλοντική εργασία

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

Σε επόμενη φάση μελέτης, θα μπορούσε να μελετηθεί το ζήτημα της φορητότητας της εφαρμογής.

Αν και η βιβλιοθήκη openCV έχει σχεδιαστεί ώστε να μπορεί να χρησιμοποιηθεί σε πολλές διαφορετικές αρχιτεκτονικές, λειτουργικά συστήματα κλπ, για το .ΝΕΤ framework δεν ισχύει το ίδιο. Αν και έχουν καταβληθεί προσπάθειες, αρκετά επιτυχημένες, για την εκτέλεση .ΝΕΤ εφαρμογών σε άλλες πλατφόρμες (για παράδειγμα το Mono του Linux ), παρόλα αυτά η επίτευξη της φορητότητας απαιτεί μια μεγαλύτερη προσκόλληση σε τυποποιημένες (standardized) δομές της C++.

Επίσης, έμφαση θα μπορούσε να δοθεί στον τομέα της απόδοσης. Όπως φάνηκε κατά την διάρκεια

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

πολυνηματισμού και παράλληλης επεξεργασίας, ώστε να αυξηθεί ακόμα περισσότερο η

95

αποδοτικότητα της εφαρμογής. Ταυτόχρονα, θα μπορούσανε να ενσωματωθούν τεχνικές και βιβλιοθήκες που μετακινούν το κόστος των υπολογισμών από την Κεντρική Μονάδα Επεξεργασίας (CPU) στον επιταχυντή γραφικών (πχ CUDA στο hardware της NVIDIA).

Επίσης μπορεί να βελτιστοποιηθεί ο αλγόριθμος τμηματοποίησης της εικόνας, έτσι ώστε να παρουσιάζει καλύτερη απόδοση στον εντοπισμό των αντικειμένων.

Τέλος, η εφαρμογή θα μπορούσε να επεκταθεί ή να προσαρμοστεί ώστε να αποτελέσει κομμάτι ενός

μεγαλύτερου συστήματος αυτόματου ελέγχου, που θα μπορούσε να συνδυάζει ρομποτικούς

μηχανισμούς για την εκτέλεση μιας εργασίας ή θα μπορούσε να επιτηρεί ένα χώρο και να εξάγει

πληροφορία από την κίνηση μέσα σε αυτόν.

96

97

Βιβλιογραφία – Πηγές

[1] Rajesh N. Dave, Tianxiong Fu, Robust shape detection using fuzzy clustering: practical

applications, Fuzzy Sets and Systems, Volume 65, Issues 2-3, 10 August 1994, Pages 161-185, ISSN 0165-0114, 10.1016/0165-0114(94)90019-1.

[2] Nada Milisavljević, Comparison of three methods for shape recognition in the case of mine detection, Pattern Recognition Letters, Volume 20, Issues 11-13, November 1999, Pages 1079-1083, ISSN 0167-8655, 10.1016/S0167-8655(99)00074-4.

[3] Mainzer, T., 2002a. Genetic algorithm for shape detection, Technical Report DCSE/TR-2002-06, University of West Bohemia in Pilsen, Pilsen, Czech Republic.

[4] Paul Viola and Michael J. Jones. Rapid Object Detection using a Boosted Cascade of Simple Features. IEEE CVPR, 2001.

[5] Rainer Lienhart and JochenMaydt. An Extended Set of Haarlike Features for Rapid Object Detection. IEEE ICIP 2002, Vol. 1, pp.900-903, Sep. 2002.

[6] Theodore Pachidis Home Page: http://users.otenet.gr/~pated.

[7] Dana H. Ballard and Christopher M. Brown (1982). Computer Vision. Prentice Hall. ISBN 0131653164.

[8] Davies, E.R., Machine Vision - Theory Algorithms Practicalities 2nd Edition Academic Press, Harcourt & Company, Publishers ISBN 0-12-206092-x.

[9]VXL Book, 2011, http://public.kitware.com/vxl/doc/release/books/core/book.html

[10] Sanchez, Julian. "DARPA building search engine for video surveillance footage". Ars Technica, October 2008.

[11] Heckel F, Schwier M, Peitgen H-O. Object Oriented Application Development with MeVisLab and Python. Lecture Notes in Informatics (Informatik 2009: Im Focus das Leben). 2009; 154:1338–

1351.

98

[12] Bitter I, van Uitert R, Wolf I, Ibáñez L, Kuhnigk JM. Comparison of Four Freely Available Frameworks for Image Processing and Visualization That Use ITK. IEEE Trans.on Visualization and Computer Graphics. 2007;13(3):483–493.

[13] Rexilius J , Spindler W, Jomier J , König M, Hahn HK, Link F, and Peitgen HO. A Framework for Algorithm Evaluation and Clinical Application Prototyping using ITK. Insight Journal as part of the ISC/NA-MIC/MICCAI Workshop on Open-Source Software 2005.

[14] Link F, Kuhagen S, Boskamp T, Rexilius J, Dachwitz S, and Peitgen HO. A Flexible Research and Development Platform for Medical Image Processing and Visualization. Proc. RSNA2004, Chicago, Dec 2004.

[15] OpenCV, σελίδα μεταφόρτωσης, http://sourceforge.net/projects/opencvlibrary/files/opencv- win/2.1/OpenCV-2.1.0-win32-vs2008.exe/download

[16] Γεώργιος Παυλίδης, «ΤΜΗΜΑΤΟΠΟΙΗΣΗ ΕΓΧΡΩΜΩΝ ΕΙΚΟΝΩΝ», Διδακτορική

Διατριβή, Δημοκρίτειο Πανεπιστήμιο Θράκης, Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών, Ξάνθη 2004.

[17] Haubecker H., Geibler P. “Handbook of Computer Vision and Applications, Signal Processing and Pattern Recognition”, Editors Bernd Jahne, Vol. 2, ACADEMIC PRESS, 1999.

[18] Gary Bradski,Adrian Kaebler(Σεπτέμβριος 2008), Learning OpenCV Computer Vision with the OpenCV Library, O’REILLY MEDIA.

[19] Turek, Fred (June 2011). "Machine Vision Fundamentals, How to Make Robots See". NASA Tech Briefs magazine 35 (6). pages 60-62.

[20] Steger, Carsten, Markus Ulrich, and Christian Wiedemann (2008). Machine Vision Algorithms and Applications. Weinheim: Wiley-VCH. p. 1. ISBN 9783527407347. Retrieved 2010-11-05.

[21] Papageorgiou, Oren and Poggio, "A general framework for object detection", International

Conference on Computer Vision, 1998.

99

[22] Link F, König M, Peitgen H-O. Multi-Resolution Volume Rendering with per Object Shading.

In: Kobbelt L, Kuhlen T, Westermann R, eds. Vision Modelling and Visualization. Berlin, Aachen:

Aka; 2006:185–191.

[23] Chapman D. “Εγχειρίδιο της Visual C++ 6,” Εκδότης: Μ. Γκιούρδας, Αθήνα 1998.

[24] Inno Setup, 2012, http://www.jrsoftware.org/isinfo.php

100

101

ΠΑΡΑΡΤΗΜΑ 1 – Εγχειρίδιο εγκατάστασης εφαρμογής

Για την απλή χρήση, η εφαρμογή διανέμεται σε πακέτο εγκατάστασης (installation package) το οποίο δημιουργήθηκε με την χρήση του λογισμικού πακετοποίησης, innosetup. Το μόνο αρχείο που απαιτείται είναι το εκτελέσιμο MyOpenCV-0.9.9.4.exe.

Η διαδικασία της εγκατάστασης έχει ώς εξής: αρχικά ζητείται από τον χρήστη να επιλέξει την γλώσσα που θα χρησιμοποιήσει το πρόγραμμα εγκατάστασης. Οι διαθέσιμες γλώσσες είναι τα Ελληνικά και τα Αγγλικά. Συστήνεται η προηγούμενη σωστή ρύθμιση της εμφάνισης των Ελληνικών, στο λειτουργικό σύστημα, για να μην υπάρχουν προβλήματα εμφάνισης των Ελληνικών.

Εικόνα 40 – Εγκατάσταση (Βήμα 1).

Η εγκατάσταση ξεκινάει. Επιλέγουμε «Επόμενο».

Εικόνα 41 – Εγκατάσταση (Βήμα 2).

102

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

«Επόμενο».

Εικόνα 42 – Επιλογή φακέλου εγκατάστασης.

Στην συνέχεια, ρυθμίζεται η συντόμευση που θα τοποθετηθεί στο μενού «Έναρξη» του λειτουργικού συστήματος. Δεν υπάρχει λόγος να επιλεγεί κάτι διαφορετικό από τις προεπιλεγμένες επιλογές.

Επιλέγουμε «Επόμενο».

Εικόνα 43 – Εγγραφή μενού «Έναρξη».

103

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

Εικόνα 44 – Δημιουργία συντομεύσεων.

Στην συνέχεια, το πρόγραμμα εγκατάστασης είναι έτοιμο να ξεκινήσει την εγκατάσταση.

Επιλέγουμε «Εγκατάσταση». Σε αυτό το σημείο, το πρόγραμμα εγκατάστασης, εντοπίζει εξαρτήσεις από τρίτο λογισμικό που δεν βρίσκεται εγκατεστημένο στο υπολογιστικό σύστημα που θα φιλοξενήσει την εφαρμογή.

Εικόνα 45 – Επισκόπηση επιλογών εγκατάστασης.

104

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

Εξυπακούεται, ότι στην πρώτη περίπτωση, απαιτείται το υπολογιστικό σύστημα να είναι συνδεδεμένο στο διαδίκτυο.

Εικόνα 46 – Μεταφόρτωση εξαρτήσεων (Βήμα 1).

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

Εικόνα 47 – Μεταφόρτωση εξαρτήσεων (Βήμα 2).

105

Μετά την επιτυχή εγκατάσταση, το πρόγραμμα εγκατάστασης μπορεί να τερματιστεί. Επιλέγουμε

«Τέλος».

Εικόνα 48 – Ολοκλήρωση εγκατάστασης.

Πλέον, η εφαρμογή είναι προσβάσιμη από το μενού «Έναρξη». Ενδεχομένως, να χρειαστεί και επανεκκίνηση του συστήματος για να ολοκληρωθεί η διαδικασία της εγκατάστασης.

Εικόνα 49 – Εκκίνηση εφαρμογής.

106

107

ΠΑΡΑΡΤΗΜΑ 2 - Εγχειρίδιο χρήσης

Μετά την επιτυχή εγκατάσταση της εφαρμογής, η εκκίνηση της γίνεται με την εκτέλεση του αρχείου cvapp.exe ή μέσω της συντόμευσης που υπάρχει στο μενού Έναρξη « Έναρξη  Όλα τα προγράμματα  MyOpenCV  OpenCVapp » .

Για την απρόσκοπτη λειτουργία της εφαρμογής και την εξαγωγή των αντίστοιχων αποτελεσμάτων είναι απαραίτητη η τήρηση των παρακάτω κανόνων από την πλευρά του χρήστη της εφαρμογής.

Συγκεκριμένα, στην περίπτωση που η εφαρμογή εκτελείται στο περιβάλλον των λειτουργικών συστημάτων Microsoft Windows Vista ή Microsoft Windows 7, είναι απαραίτητη η εκτέλεση με δικαιώματα διαχειριστή (administrative mode). Αυτό δεν είναι απαραίτητο, εάν στο συγκεκριμένο σύστημα έχει απενεργοποιηθεί η λειτουργία User Access Control (UAC). Επίσης, συστήνεται, η αποθήκευση των εικόνων που λαμβάνονται από την συσκευή λήψης, να γίνεται στο φάκελο εγκατάστασης της εφαρμογής, όπου βρίσκεται και το εκτελέσιμο αρχείο, όπως και η φόρτωση των εικόνων στην εφαρμογή να γίνεται από τον ίδιο φάκελο, προλαμβάνοντας έτσι ζητήματα με την αποθήκευση του αρχείου αποτελεσμάτων.

Στην παρακάτω εικόνα, φαίνεται η επιφάνεια εργασίας της εφαρμογής.

Εικόνα 53 – Επιφάνεια εργασίας της εφαρμογής.

108

Η επιφάνεια εργασίας της εφαρμογής περιλαμβάνει το μενού επιλογών, το οποίο αποτελείται από δύο επιλογές, την επιλογή «Αρχείο» και την επιλογή «Βοήθεια». Στην παρακάτω εικόνα φαίνονται τα περιεχόμενα της επιλογής «Αρχείο».

Εικόνα 54 – Επιλογή «Αρχείο».

Ο χρήστης μπορεί να επιλέξει την φόρτωση κάποιας έτοιμης εικόνας που βρίσκεται στο υπολογιστικό του σύστημα, όπως φαίνεται στην παρακάτω εικόνα. Συνιστάται η εικόνα που φορτώνεται στην εφαρμογή να βρίσκεται στον ίδιο φάκελο με το φάκελο εγκατάστασης της εφαρμογής (C:\Program files\MyOpenCV)

Εικόνα 55 – Φόρτωση εικόνας.

109

Η εικόνα που θα επιλεγεί, προβάλλεται σε ειδικό πλαίσιο, στην επιφάνεια εργασίας της εφαρμογής.

Εικόνα 56 – Προεπισκόπηση εικόνας.

Με την επιτυχή φόρτωση μιας οποιασδήποτε εικόνας, ενεργοποιείται η χρήση των μετρητών

ελέγχου [23] για την βελτιστοποίηση των αποτελεσμάτων της επεξεργασίας της εικόνας. Οι

μετρητές ελέγχου φαίνονται στην παρακάτω εικόνα.

110

Εικόνα 57 – Μετρητές ελέγχου4.

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

Εικόνα 58 – Λίστα γεωμετρικών χαρακτηριστικών.

4 TrackBar1 - Φίλτρο: Συνολικό πλήθος στοιχείων που αναγνωρίστηκαν. Σε συνδυασμό με το Contour, βελτιώνει τα αποτελέσματα.

TrackBar2 - Εμβαδό: Εμβαδό ενός αντικειμένου που αναγνωρίστηκε, εκφρασμένο σε pixels.

TrackBar3 - Threshold: Το πρώτο (και στην προκειμένη περίπτωση και δεύτερο) threshold του αλγορίθμου Canny. Το μικρότερο από τα δύο χρησιμοποιείται για edge linking, ενώ το μεγαλύτερο για να αρχικοποίηση αποτελεσμάτων.

TrackBar4 - Contour: Μέγιστο επίπεδο απεικόνισης contours. Αν είναι 0, απεικονίζεται μόνο ένα contour σε κάθε επίπεδο. Αν είναι 1, απεικονίζεται το contour και όλα τα contours μετά από αυτό στο ίδιο επίπεδο. Αν είναι 2, απεικονίζονται όλα τα contours μετά και όλα τα contours ενός επιπέδου πιο κάτω και ούτω καθεξής. Αν η τιμή είναι αρνητική, δεν απεικονίζονται τα contours που ακολουθούν, αλλά τα contours-παιδιά μέχρι abs(maxLevel)-1 επιπέδου.

111

Επίσης, η εφαρμογή υποστηρίζει την φόρτωση εικόνας από κάμερα κατάλληλα εγκατεστημένη στο υπολογιστικό σύστημα που είναι και η εφαρμογή. Από την διαδρομή Αρχείο Λήψη εικόνας από κάμερα:

Εικόνα 59 – Λήψη εικόνας από κάμερα.

Εμφανίζεται το παρακάτω ενημερωτικό μήνυμα:

Εικόνα 60 – Λήψη εικόνας.

Εμφανίζεται ένα νέο παράθυρο που απεικονίζει ό,τι καταγράφει η κάμερα την δεδομένη στιγμή.

112

Εικόνα 61 – Αναπαραγωγή του οπτικού πεδίου της κάμερας.

Με το πάτημα του πλήκτρου «ESC» ο χρήστης μπορεί να αποθηκεύσει ένα στιγμιότυπο (frame) σε μορφή jpg. Προφανώς, όσες φορές χρησιμοποιήσει την συγκεκριμένη μέθοδο, τόσες εικόνες μπορεί και να αποθηκεύσει.

Στη συνέχεια εμφανίζεται ένα παράθυρο διαλόγου αποθήκευσης της εικόνας και ο χρήστης καλείται

να επιλέξει τη τοποθεσία αποθήκευσης και ονομασία της εικόνας. Συνιστάται, η αποθήκευση της

εικόνας να γίνεται στον ίδιο φάκελο με την εφαρμογή.

113

Εικόνα 62 – Αποθήκευση εικόνα.

Στη συνέχεια η εικόνα που αποθηκεύτηκε φορτώνεται αυτόματα στην εφαρμογή.

114

Εικόνα 63 – Αυτόματη φόρτωση εικόνας από κάμερα.

Μετά την επιτυχή φόρτωση μιας εικόνας στην εφαρμογή, την επιλογή των παραμέτρων και τη μεταβολή των φίλτρων στις επιθυμητές τιμές, ο χρήστης μπορεί να προχωρήσει στην επεξεργασία της εικόνας πατώντας το κουμπί «Επεξεργασία». Η επεξεργασία της εικόνας, είναι μια διαδικασία εντελώς αδιαφανής για το χρήστη της εφαρμογής.

Στο πλαίσιο Log που βρίσκεται στη καρτέλα «Προεπεξεργασία» εμφανίζονται τα μηνύματα

«Έναρξη επεξεργασίας…», «Αναγνωρίστηκαν (χ) αντικείμενα, Αγνοήθηκαν (χ) αντικείμενα σαν

εξαιρετικά μικρά» και «Τέλος επεξεργασίας» που πληροφορούν τον χρήστη για την έναρξη της

επεξεργασίας, για το πόσα αντικείμενα εντοπίστηκαν στην εικόνα και πόσα από αυτά αγνοήθηκαν,

επειδή η εφαρμογή έκρινε ότι δεν αντιπροσώπευαν πραγματικά αντικείμενα αλλά ανωμαλίες στον

χρωματισμό της εικόνας και για το τέλος της επεξεργασίας.

115

Εικόνα 64 – Log Dialog.

Το κουμπί «Διακοπή επεξεργασίας» ενεργοποιείται κατά τη διάρκεια της επεξεργασίας και δίνει την επιλογή στο χρήστη, αν για κάποιο λόγο καθυστερεί πολύ να ολοκληρωθεί η επεξεργασία (π.χ.

μεγάλο πλήθος μικροαντικειμένων) , να τη διακόψει. Αν διακοπεί η επεξεργασία, εμφανίζεται το σχετικό μήνυμα στο πλαίσιο Log της εφαρμογής.

Με την επιτυχή ολοκλήρωση της επεξεργασίας, ενεργοποιούνται οι καρτέλες «Αποτελέσματα» και

«Επιλογή Σχημάτων». Στη καρτέλα (tab) «Αποτελέσματα», όπως φαίνεται στη παρακάτω εικόνα,

εμφανίζονται οι τιμές των γεωμετρικών χαρακτηριστικών (παράμετροι) που επιλέχθηκαν από το

χρήστη, για το κάθε αντικείμενο που αναγνωρίστηκε.

116

Εικόνα 65 - Αποτελέσματα

Τα αποτελέσματα αυτά αποθηκεύονται αυτόματα σε αρχείο μορφής XML, στον ίδιο φάκελο με

αυτόν που βρίσκεται η εικόνα που επεξεργάστηκε (…\MyOpenCV) και φέρει το όνομα

results+(Ημερομηνία Επεξεργασίας).xml . Στη παρακάτω εικόνα φαίνεται η δομή του αρχείου

αποτελεσμάτων.

117

Εικόνα 66 – Αρχείο αποτελεσμάτων XML

Επίσης, είναι δυνατή η ξεχωριστή αποθήκευση των αποτελεσμάτων, με τη χρήση του πλήκτρου

«Αποθήκευση». Προτείνεται η αποθήκευση να γίνεται στον ίδιο φάκελο με την εφαρμογή.

118

Στη καρτέλα (tab) «Επιλογή σχημάτων». Όπως φαίνεται και στην παρακάτω εικόνα, περιλαμβάνονται, ένα panel όπου απεικονίζεται η εικόνα σε edge-scale έκδοση, ένα panel όπου απεικονίζεται η εικόνα σε gray-scale έκδοση καθώς και ένα panel με το τελικό αποτέλεσμα της επεξεργασίας της εικόνας και το σχεδιασμό όλων των αντικειμένων που αναγνωρίστηκαν, σημειωμένα με αύξοντα αριθμό. Επίσης στο panel με το τελικό αποτέλεσμα της επεξεργασίας της εικόνας («Επεξεργασμένη εικόνα»), υπάρχουν δυο μπάρες κύλισης για την οριζόντια και κάθετη κύλιση της εικόνας, που θα μπορούσαν να χρησιμοποιηθούν στη περίπτωση που η ανάλυση της επεξεργασμένης εικόνας είναι αρκετά μεγάλη για να χωρέσει στο πλαίσιο.

Εικόνα 67 – Αποτέλεσμα επεξεργασίας.

Επίσης, εμφανίζεται ένα CheckedBoxList με όλα τα σχήματα που αναγνωρίστηκαν στην εικόνα.

Δίπλα από το κάθε σχήμα εμφανίζονται οι συντεταγμένες του κέντρου του (x,y).

119

Εικόνα 68 – Επιλογή αντικειμένων.

Κάτω από το CheckedBoxList έχει προστεθεί και ένας δείκτης θέσης του ποντικιού, που φαίνεται

στην παρακάτω εικόνα. Καθώς το ποντίκι μετακινείται εντός της εικόνας, ο δείκτης δείχνει τις

συντεταγμένες από τις οποίες περνάει το ποντίκι.. Αυτό δίνει τη δυνατότητα στο χρήστη να

αναγνωρίσει στην εικόνα τα αντικείμενα που θα επιλέξει, μέσω των συντεταγμένων του κέντρου

τους.

120

Εικόνα 69 – Δείκτης Συντεταγμένων

Ο χρήστης μπορεί να επιλέξει τα αντικείμενα που επιθυμεί και να πατήσει το πλήκτρο «Σχεδίασε Περίγραμμα», για να σχεδιαστεί το γεωμετρικό σχήμα του παραλληλόγραμμου περιμετρικά από κάθε επιλεγμένο αντικείμενο.

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

Όταν η επεξεργασία ολοκληρωθεί, ένα σχετικό πλαίσιο διαλόγου εμφανίζεται, όπου ο χρήστης πρέπει να πατήσει «ΟΚ».

Εικόνα 70 – Σχεδίαση περιγραμμάτων.

121

Στα ίδια panels εμφανίζονται οι ανανεωμένες εικόνες. Ο χρήστης μπορεί να επαναλάβει την διαδικασία όσες φορές επιθυμεί.

Εικόνα 71 – Νέο αποτέλεσμα.

Μετά το πέρας της επεξεργασίας, η επεξεργασμένη εικόνα αποθηκεύεται σε νέο αρχείο, μορφής

jpeg, που ονομάζεται output+(Ημερομηνία Επεξεργασίας).jpg και αποθηκεύεται αυτόματα στον ίδιο

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

την επεξεργασία, εμφανίζονται στη καρτέλα (tab) της εφαρμογής, «Αποτελέσματα», για το κάθε

αντικείμενο που επιλέχθηκε και το παραλληλόγραμμο που σχεδιάστηκε περιμετρικά του.

122

Εικόνα 72 – Αποτελέσματα.

Τα αποτελέσματα αυτά αποθηκεύονται αυτόματα σε αρχείο μορφής XML, στον ίδιο φάκελο με αυτόν που βρίσκεται η εικόνα που επεξεργάστηκε και φέρει το όνομα results+(Ημερομηνία Επεξεργασίας).xml. Επίσης, είναι δυνατή η ξεχωριστή αποθήκευση των αποτελεσμάτων, με την χρήση του πλήκτρου «Αποθήκευση». Προτείνεται η αποθήκευση να γίνεται στον ίδιο φάκελο με την εφαρμογή.

Εικόνα 73 – Αποθήκευση αποτελεσμάτων.

123

ΠΑΡΑΡΤΗΜΑ 3 - Πηγαίος κώδικας

Form1.h :

#pragma once

#include <math.h>

#include <tchar.h>

#include "imcapwiz.h"

#include "help.h"

#include "about.h"

#include "shapeselector.h"

#include "ImageProcessor.h"

#include "imcap.h"

#include "cv.h"

#include "highgui.h"

#using <mscorlib.dll>

using namespace System;

using namespace System::IO;

using namespace System::Reflection;

namespace cvapp {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

using namespace System::Windows::Forms;

bool isImageLoaded = false;

public ref class Form1 : public System::Windows::Forms::Form {

public:

Form1(void) {

InitializeComponent();

this->backgroundWorker1->WorkerSupportsCancellation = true;

//this->backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this,

&Form1::backgroundWorker1_DoWork );

//this->backgroundWorker1->RunWorkerCompleted += gcnew

RunWorkerCompletedEventHandler( this, &Form1::backgroundWorker1_RunWorkerCompleted );

//this->backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler(

this, &Form1::backgroundWorker1_ProgressChanged );

}

protected:

/// <summary>

/// Clean up any resources being used.

/// </summary>

124

~Form1() {

if (components) {

delete components;

} }

private: System::Windows::Forms::MenuStrip^ menuStrip1;

protected:

private: System::Windows::Forms::ToolStripMenuItem^ αρχείοToolStripMenuItem;

private: System::Windows::Forms::ToolStripMenuItem^ άνοιγμαΕικόναςToolStripMenuItem;

private: System::Windows::Forms::ToolStripMenuItem^ οδηγόςΛήψηςΕικόναςToolStripMenuItem;

private: System::Windows::Forms::ToolStripMenuItem^ έξοδοςToolStripMenuItem;

private: System::Windows::Forms::ToolStripMenuItem^ βοήθειαToolStripMenuItem;

private: System::Windows::Forms::ToolStripMenuItem^ οδηγόςΧρήστηToolStripMenuItem;

private: System::Windows::Forms::ToolStripMenuItem^ σχετικάToolStripMenuItem;

private: System::Windows::Forms::TabControl^ tabControl1;

private: System::Windows::Forms::TabPage^ tabPage1;

private: System::Windows::Forms::TabPage^ tabPage2;

private: System::Windows::Forms::GroupBox^ groupBox2;

private: System::Windows::Forms::Button^ button2;

private: System::Windows::Forms::CheckedListBox^ checkedListBox1;

private: System::Windows::Forms::GroupBox^ groupBox1;

private: System::Windows::Forms::PictureBox^ pictureBox1;

private: System::Windows::Forms::TextBox^ textBox1;

private: System::Windows::Forms::Label^ label1;

private: System::Windows::Forms::TrackBar^ trackBar2;

private: System::Windows::Forms::TrackBar^ trackBar1;

private: System::Windows::Forms::Label^ label2;

private: System::Windows::Forms::TrackBar^ trackBar3;

private: System::Windows::Forms::Label^ label4;

private: System::Windows::Forms::Label^ label3;

private: System::Windows::Forms::TrackBar^ trackBar4;

private: System::Windows::Forms::Label^ label9;

private: System::Windows::Forms::Label^ label8;

private: System::Windows::Forms::Label^ label7;

private: System::Windows::Forms::Label^ label6;

private: System::Windows::Forms::Button^ button3;

private: System::Windows::Forms::SaveFileDialog^ saveFileDialog1;

private: String ^ imagePath;

private: String ^ shapeTemplate;

private: System::Windows::Forms::TabPage^ tabPage3;

private: System::Windows::Forms::Button^ button_perigramma;

private: System::Windows::Forms::CheckedListBox^ checkedListBox2;

private: System::Windows::Forms::Label^ label5;

private: System::Windows::Forms::PictureBox^ pictureBox2;

private: System::Windows::Forms::GroupBox^ groupBox3;

private: System::Windows::Forms::GroupBox^ groupBox5;

private: System::Windows::Forms::GroupBox^ groupBox4;

private: System::Windows::Forms::PictureBox^ pictureBox4;

private: System::Windows::Forms::PictureBox^ pictureBox3;

private: CVAppResults ^improcres;

private: System::Windows::Forms::GroupBox^ groupBox6;

private: System::Windows::Forms::TextBox^ textBox_log;

private: System::Windows::Forms::Button^ button_inter;

private: System::ComponentModel::BackgroundWorker^ backgroundWorker1;

private: System::Windows::Forms::TextBox^ textBox_mouseposition;

private: System::String^ simage;

125

private: System::String^ pimage;

private: System::Windows::Forms::Panel^ panel_epeksergasmeni_eikona;

private:

/// <summary>

/// Required designer variable.

/// </summary>

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code /// <summary>

/// Required method for Designer support - do not modify /// the contents of this method with the code editor.

/// </summary>

void InitializeComponent(void) {

this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());

this->αρχείοToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->άνοιγμαΕικόναςToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->οδηγόςΛήψηςΕικόναςToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->έξοδοςToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->βοήθειαToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->οδηγόςΧρήστηToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->σχετικάToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());

this->tabControl1 = (gcnew System::Windows::Forms::TabControl());

this->tabPage1 = (gcnew System::Windows::Forms::TabPage());

this->groupBox6 = (gcnew System::Windows::Forms::GroupBox());

this->textBox_log = (gcnew System::Windows::Forms::TextBox());

this->groupBox2 = (gcnew System::Windows::Forms::GroupBox());

this->button_inter = (gcnew System::Windows::Forms::Button());

this->button2 = (gcnew System::Windows::Forms::Button());

this->checkedListBox1 = (gcnew System::Windows::Forms::CheckedListBox());

this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());

this->label9 = (gcnew System::Windows::Forms::Label());

this->label8 = (gcnew System::Windows::Forms::Label());

this->label7 = (gcnew System::Windows::Forms::Label());

this->label6 = (gcnew System::Windows::Forms::Label());

this->trackBar4 = (gcnew System::Windows::Forms::TrackBar());

this->trackBar3 = (gcnew System::Windows::Forms::TrackBar());

this->label4 = (gcnew System::Windows::Forms::Label());

this->label3 = (gcnew System::Windows::Forms::Label());

this->label2 = (gcnew System::Windows::Forms::Label());

this->label1 = (gcnew System::Windows::Forms::Label());

this->trackBar2 = (gcnew System::Windows::Forms::TrackBar());

this->trackBar1 = (gcnew System::Windows::Forms::TrackBar());

this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());

this->tabPage2 = (gcnew System::Windows::Forms::TabPage());

this->button3 = (gcnew System::Windows::Forms::Button());

126

this->textBox1 = (gcnew System::Windows::Forms::TextBox());

this->tabPage3 = (gcnew System::Windows::Forms::TabPage());

this->textBox_mouseposition = (gcnew System::Windows::Forms::TextBox());

this->groupBox5 = (gcnew System::Windows::Forms::GroupBox());

this->pictureBox4 = (gcnew System::Windows::Forms::PictureBox());

this->groupBox4 = (gcnew System::Windows::Forms::GroupBox());

this->pictureBox3 = (gcnew System::Windows::Forms::PictureBox());

this->groupBox3 = (gcnew System::Windows::Forms::GroupBox());

this->pictureBox2 = (gcnew System::Windows::Forms::PictureBox());

this->button_perigramma = (gcnew System::Windows::Forms::Button());

this->checkedListBox2 = (gcnew System::Windows::Forms::CheckedListBox());

this->label5 = (gcnew System::Windows::Forms::Label());

this->saveFileDialog1 = (gcnew System::Windows::Forms::SaveFileDialog());

this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker());

this->panel_epeksergasmeni_eikona = (gcnew System::Windows::Forms::Panel());

this->menuStrip1->SuspendLayout();

this->tabControl1->SuspendLayout();

this->tabPage1->SuspendLayout();

this->groupBox6->SuspendLayout();

this->groupBox2->SuspendLayout();

this->groupBox1->SuspendLayout();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar4))-

>BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar3))-

>BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar2))-

>BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->trackBar1))-

>BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this-

>pictureBox1))->BeginInit();

this->tabPage2->SuspendLayout();

this->tabPage3->SuspendLayout();

this->groupBox5->SuspendLayout();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this-

>pictureBox4))->BeginInit();

this->groupBox4->SuspendLayout();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this-

>pictureBox3))->BeginInit();

this->groupBox3->SuspendLayout();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this-

>pictureBox2))->BeginInit();

this->panel_epeksergasmeni_eikona->SuspendLayout();

this->SuspendLayout();

//

// menuStrip1 //

this->menuStrip1->Items->AddRange(gcnew cli::array<

System::Windows::Forms::ToolStripItem^ >(2) {this->αρχείοToolStripMenuItem, this->βοήθειαToolStripMenuItem});

this->menuStrip1->Location = System::Drawing::Point(0, 0);

this->menuStrip1->Name = L"menuStrip1";

this->menuStrip1->Size = System::Drawing::Size(928, 24);

this->menuStrip1->TabIndex = 0;

this->menuStrip1->Text = L"menuStrip1";

//

// αρχείοToolStripMenuItem //

this->αρχείοToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array<

System::Windows::Forms::ToolStripItem^ >(3) {this->άνοιγμαΕικόναςToolStripMenuItem, this->οδηγόςΛήψηςΕικόναςToolStripMenuItem, this->έξοδοςToolStripMenuItem});

this->αρχείοToolStripMenuItem->Name = L"αρχείοToolStripMenuItem";

127

this->αρχείοToolStripMenuItem->Size = System::Drawing::Size(51, 20);

this->αρχείοToolStripMenuItem->Text = L"Αρχείο";

//

// άνοιγμαΕικόναςToolStripMenuItem //

this->άνοιγμαΕικόναςToolStripMenuItem->Name = L"άνοιγμαΕικόναςToolStripMenuItem";

this->άνοιγμαΕικόναςToolStripMenuItem->Size = System::Drawing::Size(219, 22);

this->άνοιγμαΕικόναςToolStripMenuItem->Text = L"Άνοιγμα εικόνας από αρχείο";

this->άνοιγμαΕικόναςToolStripMenuItem->Click += gcnew System::EventHandler(this,

&Form1::άνοιγμαΕικόναςToolStripMenuItem_Click);

//

// οδηγόςΛήψηςΕικόναςToolStripMenuItem //

this->οδηγόςΛήψηςΕικόναςToolStripMenuItem->Name = L"οδηγόςΛήψηςΕικόναςToolStripMenuItem";

this->οδηγόςΛήψηςΕικόναςToolStripMenuItem->Size = System::Drawing::Size(219, 22);

this->οδηγόςΛήψηςΕικόναςToolStripMenuItem->Text = L"Λήψη εικόνας από κάμερα";

this->οδηγόςΛήψηςΕικόναςToolStripMenuItem->Click += gcnew

System::EventHandler(this, &Form1::οδηγόςΛήψηςΕικόναςToolStripMenuItem_Click);

//

// έξοδοςToolStripMenuItem //

this->έξοδοςToolStripMenuItem->Name = L"έξοδοςToolStripMenuItem";

this->έξοδοςToolStripMenuItem->Size = System::Drawing::Size(219, 22);

this->έξοδοςToolStripMenuItem->Text = L"Έξοδος";

this->έξοδοςToolStripMenuItem->Click += gcnew System::EventHandler(this,

&Form1::έξοδοςToolStripMenuItem_Click);

//

// βοήθειαToolStripMenuItem //

this->βοήθειαToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array<

System::Windows::Forms::ToolStripItem^ >(2) {this->οδηγόςΧρήστηToolStripMenuItem, this->σχετικάToolStripMenuItem});

this->βοήθειαToolStripMenuItem->Name = L"βοήθειαToolStripMenuItem";

this->βοήθειαToolStripMenuItem->Size = System::Drawing::Size(56, 20);

this->βοήθειαToolStripMenuItem->Text = L"Βοήθεια";

//

// οδηγόςΧρήστηToolStripMenuItem //

this->οδηγόςΧρήστηToolStripMenuItem->Name = L"οδηγόςΧρήστηToolStripMenuItem";

this->οδηγόςΧρήστηToolStripMenuItem->Size = System::Drawing::Size(172, 22);

this->οδηγόςΧρήστηToolStripMenuItem->Text = L"Οδηγός χρήστη...";

this->οδηγόςΧρήστηToolStripMenuItem->Click += gcnew System::EventHandler(this,

&Form1::οδηγόςΧρήστηToolStripMenuItem_Click);

//

// σχετικάToolStripMenuItem //

this->σχετικάToolStripMenuItem->Name = L"σχετικάToolStripMenuItem";

this->σχετικάToolStripMenuItem->Size = System::Drawing::Size(172, 22);

this->σχετικάToolStripMenuItem->Text = L"Σχετικά...";

this->σχετικάToolStripMenuItem->Click += gcnew System::EventHandler(this,

&Form1::σχετικάToolStripMenuItem_Click);

//

// tabControl1 //

this->tabControl1->Controls->Add(this->tabPage1);

this->tabControl1->Controls->Add(this->tabPage2);

this->tabControl1->Controls->Add(this->tabPage3);

this->tabControl1->Location = System::Drawing::Point(0, 29);

this->tabControl1->Name = L"tabControl1";

this->tabControl1->SelectedIndex = 0;

this->tabControl1->Size = System::Drawing::Size(928, 690);

128

this->tabControl1->TabIndex = 1;

//

// tabPage1 //

this->tabPage1->BackColor = System::Drawing::Color::GhostWhite;

this->tabPage1->Controls->Add(this->groupBox6);

this->tabPage1->Controls->Add(this->groupBox2);

this->tabPage1->Controls->Add(this->groupBox1);

this->tabPage1->Location = System::Drawing::Point(4, 22);

this->tabPage1->Name = L"tabPage1";

this->tabPage1->Padding = System::Windows::Forms::Padding(3);

this->tabPage1->Size = System::Drawing::Size(920, 664);

this->tabPage1->TabIndex = 0;

this->tabPage1->Text = L"Προεπεξεργασία";

this->tabPage1->UseVisualStyleBackColor = true;

//

// groupBox6 //

this->groupBox6->Anchor =

static_cast<System::Windows::Forms::AnchorStyles>(((System::Windows::Forms::AnchorStyles::Top

| System::Windows::Forms::AnchorStyles::Left)

| System::Windows::Forms::AnchorStyles::Right));

this->groupBox6->Controls->Add(this->textBox_log);

this->groupBox6->Location = System::Drawing::Point(596, 291);

this->groupBox6->Name = L"groupBox6";

this->groupBox6->Size = System::Drawing::Size(317, 367);

this->groupBox6->TabIndex = 4;

this->groupBox6->TabStop = false;

this->groupBox6->Text = L"Log";

//

// textBox_log //

this->textBox_log->BackColor = System::Drawing::SystemColors::ControlLightLight;

this->textBox_log->BorderStyle = System::Windows::Forms::BorderStyle::None;

this->textBox_log->Location = System::Drawing::Point(7, 20);

this->textBox_log->Multiline = true;

this->textBox_log->Name = L"textBox_log";

this->textBox_log->ReadOnly = true;

this->textBox_log->Size = System::Drawing::Size(304, 341);

this->textBox_log->TabIndex = 0;

//

// groupBox2 //

this->groupBox2->Anchor = System::Windows::Forms::AnchorStyles::Left;

this->groupBox2->AutoSize = true;

this->groupBox2->Controls->Add(this->button_inter);

this->groupBox2->Controls->Add(this->button2);

this->groupBox2->Controls->Add(this->checkedListBox1);

this->groupBox2->Location = System::Drawing::Point(596, 33);

this->groupBox2->Name = L"groupBox2";

this->groupBox2->Size = System::Drawing::Size(318, 252);

this->groupBox2->TabIndex = 3;

this->groupBox2->TabStop = false;

this->groupBox2->Text = L"Παράμετροι";

//

// button_inter //

this->button_inter->BackColor = System::Drawing::SystemColors::ActiveBorder;

this->button_inter->Location = System::Drawing::Point(141, 206);

this->button_inter->Name = L"button_inter";

this->button_inter->Size = System::Drawing::Size(138, 27);

this->button_inter->TabIndex = 2;

129

this->button_inter->Text = L"Διακοπή Επεξεργασίας";

this->button_inter->UseVisualStyleBackColor = false;

this->button_inter->Click += gcnew System::EventHandler(this,

&Form1::button_inter_Click);

//

// button2 //

this->button2->BackColor = System::Drawing::SystemColors::ActiveBorder;

this->button2->Location = System::Drawing::Point(8, 206);

this->button2->Name = L"button2";

this->button2->Size = System::Drawing::Size(127, 27);

this->button2->TabIndex = 1;

this->button2->Text = L"Επεξεργασία";

this->button2->UseVisualStyleBackColor = false;

this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);

//

// checkedListBox1 //

this->checkedListBox1->BackColor = System::Drawing::Color::GhostWhite;

this->checkedListBox1->CheckOnClick = true;

this->checkedListBox1->Dock = System::Windows::Forms::DockStyle::Top;

this->checkedListBox1->FormattingEnabled = true;

this->checkedListBox1->Items->AddRange(gcnew cli::array< System::Object^ >(7) {L"Γεωμετρικό κέντρο", L"Γεωμετρικό μήκος",

L"Γεωμετρικό πλάτος", L"Γωνίες", L"Εμβαδό", L"Κέντρο βάρους", L"Περίμετρος"});

this->checkedListBox1->Location = System::Drawing::Point(3, 16);

this->checkedListBox1->Name = L"checkedListBox1";

this->checkedListBox1->Size = System::Drawing::Size(312, 184);

this->checkedListBox1->Sorted = true;

this->checkedListBox1->TabIndex = 0;

//

// groupBox1 //

this->groupBox1->Controls->Add(this->label9);

this->groupBox1->Controls->Add(this->label8);

this->groupBox1->Controls->Add(this->label7);

this->groupBox1->Controls->Add(this->label6);

this->groupBox1->Controls->Add(this->trackBar4);

this->groupBox1->Controls->Add(this->trackBar3);

this->groupBox1->Controls->Add(this->label4);

this->groupBox1->Controls->Add(this->label3);

this->groupBox1->Controls->Add(this->label2);

this->groupBox1->Controls->Add(this->label1);

this->groupBox1->Controls->Add(this->trackBar2);

this->groupBox1->Controls->Add(this->trackBar1);

this->groupBox1->Controls->Add(this->pictureBox1);

this->groupBox1->Dock = System::Windows::Forms::DockStyle::Left;

this->groupBox1->Location = System::Drawing::Point(3, 3);

this->groupBox1->Name = L"groupBox1";

this->groupBox1->Size = System::Drawing::Size(587, 658);

this->groupBox1->TabIndex = 2;

this->groupBox1->TabStop = false;

this->groupBox1->Text = L"Προεπισκόπηση εικόνας";

//

// label9 //

this->label9->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;

this->label9->Location = System::Drawing::Point(538, 561);

this->label9->Name = L"label9";

this->label9->Size = System::Drawing::Size(30, 15);

this->label9->TabIndex = 15;

130

this->label9->Text = L"2";

//

// label8 //

this->label8->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;

this->label8->Location = System::Drawing::Point(538, 519);

this->label8->Name = L"label8";

this->label8->Size = System::Drawing::Size(30, 15);

this->label8->TabIndex = 14;

this->label8->Text = L"128";

//

// label7 //

this->label7->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;

this->label7->Location = System::Drawing::Point(538, 482);

this->label7->Name = L"label7";

this->label7->Size = System::Drawing::Size(30, 15);

this->label7->TabIndex = 13;

this->label7->Text = L"3";

//

// label6 //

this->label6->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;

this->label6->Location = System::Drawing::Point(538, 438);

this->label6->Name = L"label6";

this->label6->Size = System::Drawing::Size(30, 15);

this->label6->TabIndex = 12;

this->label6->Text = L"5";

//

// trackBar4 //

this->trackBar4->Enabled = false;

this->trackBar4->LargeChange = 4;

this->trackBar4->Location = System::Drawing::Point(68, 549);

this->trackBar4->Minimum = 2;

this->trackBar4->Name = L"trackBar4";

this->trackBar4->Size = System::Drawing::Size(463, 42);

this->trackBar4->SmallChange = 2;

this->trackBar4->TabIndex = 9;

this->trackBar4->TickFrequency = 2;

this->trackBar4->Value = 2;

this->trackBar4->Scroll += gcnew System::EventHandler(this,

&Form1::trackBar4_Scroll);

//

// trackBar3 //

this->trackBar3->Enabled = false;

this->trackBar3->LargeChange = 16;

this->trackBar3->Location = System::Drawing::Point(68, 504);

this->trackBar3->Maximum = 255;

this->trackBar3->Minimum = 1;

this->trackBar3->Name = L"trackBar3";

this->trackBar3->Size = System::Drawing::Size(463, 42);

this->trackBar3->SmallChange = 8;

this->trackBar3->TabIndex = 8;

this->trackBar3->TickFrequency = 8;

this->trackBar3->Value = 128;

this->trackBar3->Scroll += gcnew System::EventHandler(this,

&Form1::trackBar3_Scroll);

//

// label4 //

131

this->label4->AutoSize = true;

this->label4->Location = System::Drawing::Point(8, 551);

this->label4->Name = L"label4";

this->label4->Size = System::Drawing::Size(44, 13);

this->label4->TabIndex = 7;

this->label4->Text = L"Contour";

//

// label3 //

this->label3->AutoSize = true;

this->label3->Location = System::Drawing::Point(8, 519);

this->label3->Name = L"label3";

this->label3->Size = System::Drawing::Size(54, 13);

this->label3->TabIndex = 6;

this->label3->Text = L"Threshold";

//

// label2 //

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(8, 484);

this->label2->Name = L"label2";

this->label2->Size = System::Drawing::Size(43, 13);

this->label2->TabIndex = 5;

this->label2->Text = L"Φίλτρο";

//

// label1 //

this->label1->AutoSize = true;

this->label1->Location = System::Drawing::Point(7, 439);

this->label1->Name = L"label1";

this->label1->Size = System::Drawing::Size(44, 13);

this->label1->TabIndex = 4;

this->label1->Text = L"Εμβαδό";

//

// trackBar2 //

this->trackBar2->Enabled = false;

this->trackBar2->Location = System::Drawing::Point(68, 424);

this->trackBar2->Maximum = 60;

this->trackBar2->Minimum = 1;

this->trackBar2->Name = L"trackBar2";

this->trackBar2->Size = System::Drawing::Size(463, 42);

this->trackBar2->TabIndex = 3;

this->trackBar2->Value = 5;

this->trackBar2->Scroll += gcnew System::EventHandler(this,

&Form1::trackBar2_Scroll);

//

// trackBar1 //

this->trackBar1->Enabled = false;

this->trackBar1->Location = System::Drawing::Point(68, 466);

this->trackBar1->Maximum = 20;

this->trackBar1->Minimum = 1;

this->trackBar1->Name = L"trackBar1";

this->trackBar1->Size = System::Drawing::Size(463, 42);

this->trackBar1->TabIndex = 2;

this->trackBar1->Value = 3;

this->trackBar1->Scroll += gcnew System::EventHandler(this,

&Form1::trackBar1_Scroll);

//

// pictureBox1 //

Documentos relacionados