Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Om #25570

Closed
motijimmy opened this issue May 10, 2024 · 0 comments
Closed

Om #25570

motijimmy opened this issue May 10, 2024 · 0 comments

Comments

@motijimmy
Copy link

motijimmy commented May 10, 2024

import cv2
import numpy as np

cap = cv2.VideoCapture('https://github.com/opencv/opencv/assets/169485743/b9494f0a-7dfc-431d-85a1-c891d201a0ea

')

Set up the parameters for ShiTomasi corner detection

feature_params = dict(maxCorners=100, qualityLevel=0.3, minDistance=7, blockSize=7)

Parameters for lucas kanade optical flow

lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))

Take the first frame and find corners in it

ret, old_frame = cap.read()
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
p0 = cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params)

Create a random color to draw tracks

color = np.random.randint(0, 255, (100, 3))

while True:
# Read the new frame
ret, frame = cap.read()
if not ret:
break

frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# Calculate optical flow
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)

# Select good points
good_new = p1[st == 1]
good_old = p0[st == 1]

# Draw the tracks
for i, (new, old) in enumerate(zip(good_new, good_old)):
    a, b = new.ravel()
    c, d = old.ravel()
    frame = cv2.line(frame, (a, b), (c, d), color[i].tolist(), 2)
    frame = cv2.circle(frame, (a, b), 5, color[i].tolist(), -1)

# Display the result
cv2.imshow('Frame', frame)

# Update the previous frame and previous points
old_gray = frame_gray.copy()
p0 = good_new.reshape(-1, 1, 2)

if cv2.waitKey(1) & 0xFF == ord('q'):
    break

Release the capture and close any open windows

cap.release()
cv2.destroyAllWindows()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants