From b6865dc90ff182f0b8e5cf73f2f44eab9304db79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=80=D0=B0=D0=B9=D0=BD=D0=BE=D0=B2=20=D0=A0=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=20=D0=90=D0=BD=D0=B0=D1=82=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=D0=B8=D1=87?= <rakraynov@edu.hse.ru> Date: Fri, 4 Oct 2024 19:30:26 +0000 Subject: [PATCH] add: main file --- main.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..08e0af5 --- /dev/null +++ b/main.py @@ -0,0 +1,59 @@ +import cv2 +import numpy as np + +def track_object_in_video(input_video_path, output_video_path, lower_color_range, upper_color_range): + video_capture = cv2.VideoCapture(input_video_path) + + frame_width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)) + frame_height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) + frame_rate = video_capture.get(cv2.CAP_PROP_FPS) + + video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*'mp4v'), frame_rate, (frame_width, frame_height)) + + tracked_points = [] + + while True: + ret, current_frame = video_capture.read() + if not ret: + break + + hsv_frame = cv2.cvtColor(current_frame, cv2.COLOR_BGR2HSV) + mask = cv2.inRange(hsv_frame, lower_color_range, upper_color_range) + _, binary_image = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY) + + contours, _ = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + + if contours: + largest_contour = max(contours, key=cv2.contourArea) + moments = cv2.moments(largest_contour) + + if moments['m00'] != 0: + center_x = int(moments['m10'] / moments['m00']) + center_y = int(moments['m01'] / moments['m00']) + tracked_points.append((center_x, center_y)) + cv2.drawMarker(current_frame, (center_x, center_y), (0, 255, 0), markerType=cv2.MARKER_CROSS) + + for point in tracked_points: + cv2.drawMarker(current_frame, point, (255, 0, 0), markerType=cv2.MARKER_CROSS) + + video_writer.write(current_frame) + cv2.imshow('Object Tracking', current_frame) + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + + video_capture.release() + video_writer.release() + cv2.destroyAllWindows() + +def main(): + input_video = r'./IMG_2304.MOV' + output_video = 'tracked_output_video.mp4' + + black_lower_bound = np.array([0, 0, 0]) + black_upper_bound = np.array([180, 255, 50]) + + track_object_in_video(input_video, output_video, black_lower_bound, black_upper_bound) + +if __name__ == "__main__": + main() -- GitLab