Εργαλεία Χρήστη

Εργαλεία ιστότοπου


opencv

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

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

Σύνδεσμος σε αυτή την προβολή διαφορών.

Προηγούμενος έλεγχος και από τις δύο πλευρές Προηγούμενη αναθεώρηση
Επόμενη αναθεώρηση
Προηγούμενη αναθεώρηση
opencv [2020/02/24 23:07]
John_Crabs Χρήση της OpenCV για προβολή εικόνας σε GUI
opencv [2020/11/21 09:52] (τρέχουσα)
Γραμμή 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.1582585668.txt.gz · Τελευταία τροποποίηση: 2020/11/21 09:52 (εξωτερική τροποποίηση)