ROI select from video in the last frame

asked 2019-03-04 04:04:29 -0500

Abdu gravatar image

updated 2019-03-04 04:24:41 -0500

berak gravatar image

Hi all, I have found and modified the following code:


import cv2
import sys

(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')

if __name__ == '__main__':

    # Set up tracker.
    # Instead of MIL, you can also use

    tracker_types = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']
    tracker_type = tracker_types[2]

    if int(minor_ver) < 3:
        tracker = cv2.Tracker_create(tracker_type)
    else:
        if tracker_type == 'BOOSTING':
            tracker = cv2.TrackerBoosting_create()
        if tracker_type == 'MIL':
            tracker = cv2.TrackerMIL_create()
        if tracker_type == 'KCF':
            tracker = cv2.TrackerKCF_create()
        if tracker_type == 'TLD':
            tracker = cv2.TrackerTLD_create()
        if tracker_type == 'MEDIANFLOW':
            tracker = cv2.TrackerMedianFlow_create()
        if tracker_type == 'GOTURN':
            tracker = cv2.TrackerGOTURN_create()
        if tracker_type == 'MOSSE':
            tracker = cv2.TrackerMOSSE_create()
        if tracker_type == "CSRT":
            tracker = cv2.TrackerCSRT_create()

    # Read video
    video = cv2.VideoCapture("C:\Sample3.mp4")


    def rescale_frame(frame, percent=25):

        width = int(frame.shape[1] * percent / 100)
        height = int(frame.shape[0] * percent / 100)
        dim = (width, height)
        return cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
    # Exit if video not opened.
    if not video.isOpened():
        print
        "Could not open video"
        sys.exit()

    # Read the first frame.

    ok, frame = video.read()

    if not ok:
        print
        'Cannot read video file'
        sys.exit()
    frame = rescale_frame(frame, percent=25)
    # Define an initial bounding box
    bbox = (287, 23, 10, 200)

    # Uncomment the line below to select a different bounding box
    bbox = cv2.selectROI("Select ROI", frame, fromCenter=True, showCrosshair=False)

    # Initialize tracker with first frame and bounding box
    ok = tracker.init(frame, bbox)

    while True:
        # Read a new frame
        ok, frame = video.read()
        if not ok:
            break
        frame = rescale_frame(frame, percent=25)
        # Start timer
        timer = cv2.getTickCount()

        # Update tracker
        ok, bbox = tracker.update(frame)

        # Calculate Frames per second (FPS)
        fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);

        # Draw bounding box
        if ok:
            # Tracking success
            p1 = (int(bbox[0]), int(bbox[1]))
            p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
            cv2.rectangle(frame, p1, p2, (255, 0, 0), 2, 1)
        else:
            # Tracking failure
            cv2.putText(frame, "Tracking failure detected", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)

        # Display tracker type on frame
        cv2.putText(frame, tracker_type + " Tracker", (100, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2);

        # Display FPS on frame
        cv2.putText(frame, "FPS : " + str(int(fps)), (100, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2);

        # Display result
        cv2.imshow("Tracking", frame)

        # Exit if ESC pressed
        k = cv2.waitKey(1) & 0xff
        if k == 27: break
 

Could you please help me to choose an ROI from the last frame since the object which I am attending to track appears in the last frame of the video? Thank you in advance.

edit retag flag offensive close merge delete

Comments

how do you expect to track something, that only appears in the last frame of the video ?

berak gravatar imageberak ( 2019-03-04 04:24:13 -0500 )edit
1

The object which I would like to track appears in the 3rd or the 4th frame. Please take a look to an example of the object(foot of the player when it touches the ground): link textlink text

Abdu gravatar imageAbdu ( 2019-03-04 04:31:35 -0500 )edit

sorry, but i never watch youtube vids (waste of time)

berak gravatar imageberak ( 2019-03-04 05:21:19 -0500 )edit

Too much an error for OpenCV 4.0.1. AttributeError: 'module' object has no attribute 'Tracker_create'

supra56 gravatar imagesupra56 ( 2019-03-04 12:38:03 -0500 )edit