Optimize template matching in VideoEditor to utilize cropped regions for improved performance

This commit modifies the template matching logic in the VideoEditor to use only the cropped region of the frame when available, significantly enhancing the speed of template tracking. If no crop is applied, the original frame is used for tracking. This change improves the efficiency of the template matching process while maintaining accuracy in locating objects during video editing sessions.
This commit is contained in:
2025-09-26 17:52:09 +02:00
parent 184aceeee3
commit c1c01e86ca

View File

@@ -1683,14 +1683,26 @@ class VideoEditor:
template_offset = None template_offset = None
if self.template_matching_enabled and self.tracking_template is not None: if self.template_matching_enabled and self.tracking_template is not None:
if self.current_display_frame is not None: if self.current_display_frame is not None:
# Apply template matching to the ORIGINAL frame (before any transformations) # Use only the cropped region for much faster template matching
# This avoids infinite recursion and ensures template can find the object if self.crop_rect:
crop_x, crop_y, crop_w, crop_h = self.crop_rect
# Extract only the cropped region from raw frame
cropped_frame = self.current_display_frame[crop_y:crop_y+crop_h, crop_x:crop_x+crop_w]
if cropped_frame is not None and cropped_frame.size > 0:
# Track template in cropped frame (much faster!)
result = self.track_template(cropped_frame)
if result:
center_x, center_y, confidence = result
# Map from cropped frame coordinates to raw frame coordinates
# Add crop offset back
raw_x = center_x + crop_x
raw_y = center_y + crop_y
template_offset = (raw_x, raw_y)
else:
# No crop - use full frame
result = self.track_template(self.current_display_frame) result = self.track_template(self.current_display_frame)
if result: if result:
center_x, center_y, confidence = result center_x, center_y, confidence = result
print(f"DEBUG: Template match found at ({center_x}, {center_y}) with confidence {confidence:.2f}")
# Template matching returns coordinates in raw frame space
template_offset = (center_x, center_y) template_offset = (center_x, center_y)
# Calculate offset from feature tracking if enabled # Calculate offset from feature tracking if enabled
@@ -1785,8 +1797,23 @@ class VideoEditor:
return None return None
if self.current_display_frame is not None: if self.current_display_frame is not None:
# Apply template matching to the ORIGINAL frame (before any transformations) # Use only the cropped region for much faster template matching
# This avoids infinite recursion and ensures template can find the object if self.crop_rect:
crop_x, crop_y, crop_w, crop_h = self.crop_rect
# Extract only the cropped region from raw frame
cropped_frame = self.current_display_frame[crop_y:crop_y+crop_h, crop_x:crop_x+crop_w]
if cropped_frame is not None and cropped_frame.size > 0:
# Track template in cropped frame (much faster!)
result = self.track_template(cropped_frame)
if result:
center_x, center_y, confidence = result
# Map from cropped frame coordinates to raw frame coordinates
# Add crop offset back
raw_x = center_x + crop_x
raw_y = center_y + crop_y
return (raw_x, raw_y, confidence)
else:
# No crop - use full frame
result = self.track_template(self.current_display_frame) result = self.track_template(self.current_display_frame)
if result: if result:
center_x, center_y, confidence = result center_x, center_y, confidence = result