Σύγκριση εκδόσεων

Εδώ βλέπετε τις διαφορές μεταξύ της επιλεγμένης έκδοσης και της τρέχουσας έκδοσης της σελίδας.

opencv 2020/02/24 23:07 opencv 2020/02/25 10:48 τρέχουσα
Γραμμή 316: Γραμμή 316:
       
        return True, newImg  # Return True for success and the newImg         return True, newImg  # Return True for success and the newImg
 +
====Χρήση της OpenCV για προβολή εικόνας σε GUI==== ====Χρήση της OpenCV για προβολή εικόνας σε GUI====
Γραμμή 379: Γραμμή 380:
       
        return True         return True
 +
 +===Προβολή Βίντεο===
 +
 +Με αντίστοιχο γίνεται και η προβολή ενός βίντεο. Το βίντεο αποτελείται από μία σειρά εικόνων που η μία διαδέχεται την άλλη με κάποια συγκεκριμένη ταχύτητα που μετριέται σε καρέ/δευτερόλεπτο (fps). Η διαφορά με τα παραπάνω παραδείγματα είναι ότι η αρχική παράμετρος θα πρέπει να διαβάσει πρώτα το βίντεο και στη συνέχεια να δημιουργηθεί ένας επαναλληπτικός βρόγχος, ο οποίος θα δημιουργεί κάθε φορά το παράθυρο εμφανίζοντας σε αυτό ένα διαφορετικό καρέ. Αυτό συνεπάγεται ότι στην αρχή του επαναληπτικού βρόγχου θα δημιουργείται μία μεταβλητή η οποία θα αντιστοιχεί στην εικόνα του επόμενου καρέ.
 +
 +Για το άνοιγμα ενός βίντεο η OpenCV έχει δημιουργήσει τη συνάρτηση **cv.VideoCapture(src)**, η οποία σαν παράμετρο δέχεται την τοποθεσία του βίντεο. Η ανάγνωση κάθε καρέ πραγματοποιείται καλώντας τη συνάρτηση **read()** εντός του αντικειμένου που δημιουργήθηκε χρησιμοποιώντας τη συνάρτηση VideoCapture().
 +Αυτό στην πράξη μεταφράζεται ως **success, frame = videoFile.read()**. Η συνάρτηση **read()** επιστρέφει σαν πρώτη παράμετρο την επιτυχία ή αποτυχία ανάγνωσης του καρέ (για αυτό και θα πρέπει να γίνεται πάντα έλεγχος εάν διαβάστηκε το καρέ ή όχι) και σαν δέυτερη παράμετρο επιστροφής είναι το καρέ. Εάν δεν γίνει έλεγχος, τότε όταν τελειώσει το βίντεο, θα δημιουργηθούν σφάλματα, αφότου η μεταβλητή frame δεν θα έχει την πληροφορία της εικόνας, αλλά κάτι "άχρηστο".
 +
 +==Απλή Προσπέλαση-Προβολή Βίντεο==
 +
 +    def openVideoInWindow(src: str):
 +        print("\n")
 +        print(str(dt.datetime.now()) + " : Read video file at %s" % src)
 +        videoFile = cv.VideoCapture(src)  # Read the image file at path src
 +   
 +        # Check if video was opened correctly
 +        if not videoFile.isOpened():
 +            print(str(dt.datetime.now()) + "  : Error: Cannot read video at path %s" % src)
 +            return False
 +   
 +        windowName = os.path.basename(src)  # Read the image name and add it to var windowName
 +        cv.namedWindow(winname=windowName, flags=cv.WINDOW_AUTOSIZE)  # Create window
 +   
 +        videoPlay = True
 +        while videoPlay:
 +            success, frame = np.array(videoFile.read())
 +            if not success:
 +                break
 +            cv.imshow(winname=windowName, mat=frame)  # Show the image
 +            press_ESC = cv.waitKey(33)  # Wait 33ms and check if user will press ESC key
 +            if press_ESC is 27:
 +                break
 +        cv.destroyAllWindows()  # If the window is the main window, use this rather than cv.destroyWindow()
 +
 +
 +==Προβολή Βίντεο Με Χρήση Πυραμίδων==
 +
 +Εάν η ανάλυση του βίντεο είναι πολύ μεγάλη, θα δημιουργηθεί το ίδιο πρόβλημα με τις εικόνες (το παράθυρο θα είναι μεγαλύτερο από την οθόνη). Για αυτό τον
 +λόγο συνιστάται η χρήση πυραμίδων για μείωση της ανάλυσης στα επιθυμητά όρια.
 +
 +    def openVideoInWindowPyramidVersion(src: str):
 +        print("\n")
 +        print(str(dt.datetime.now()) + " : Read video file at %s" % src)
 +        videoFile = cv.VideoCapture(src)  # Read the image file at path src
 +   
 +        # Check if video was opened correctly
 +        if not videoFile.isOpened():
 +            print(str(dt.datetime.now()) + "  : Error: Cannot read video at path %s" % src)
 +            return False
 +   
 +        windowName = os.path.basename(src)  # Read the image name and add it to var windowName
 +        cv.namedWindow(winname=windowName, flags=cv.WINDOW_AUTOSIZE)  # Create window
 +   
 +        videoPlay = True
 +        while videoPlay:
 +            success, frame = videoFile.read()
 +            if not success:
 +                break
 +   
 +            h, w, _channels = map(int, frame.shape)  # Find the size of the image
 +            while w > 1024 or h > 720:  # We want the image to fit the screen (this values ensures that)
 +                frame = cv.pyrDown(src=frame, dstsize=(w // 2, h // 2))  # Go down a pyramid
 +                # (there is also cv.pyrUp(src=img, dstsize=(w ** 2, h ** 2)
 +                h, w, _channels = map(int, frame.shape)  # Find the new size of the image
 +   
 +            cv.imshow(winname=windowName, mat=frame)  # Show the image
 +            press_ESC = cv.waitKey(33)  # Wait 33ms and check if user will press ESC key
 +            if press_ESC is 27:
 +                break
 +        cv.destroyAllWindows()  # If the window is the main window, use this rather than cv.destroyWindow()
 +
 +
 
opencv.txt · Τελευταία τροποποίηση: 2020/02/25 10:48 από John_Crabs