import cv2 import numpy as np import math def draw_arc_on_image( image_path, output_path, params, thickness=2, color=(0, 0, 255) ): """ Draw ellipse arc on an image using given parameters. Args: image_path (str): path to the input image. output_path (str): path to save the output image. params (list or tensor): [cx, cy, a, b, theta1, theta2, theta3] cx, cy: center of ellipse a, b: long and short axis (radius, not diameter) theta1, theta2, theta3: angle range (radians) thickness (int): thickness of the arc. color (tuple): BGR color. Notes: OpenCV ellipse uses: - center (int, int) - axis lengths (int, int) are *half lengths* - rotation angle in degrees - startAngle, endAngle in degrees """ # Load image img = cv2.imread(image_path) if img is None: raise FileNotFoundError(f"Image not found: {image_path}") cx, cy, a, b, t1, t2, t3 = params # Convert to int for OpenCV cx = int(cx) cy = int(cy) a = int(a) # long axis (radius) b = int(b) # short axis (radius) # Convert radian to degree t1_deg = math.degrees(t1) t2_deg = math.degrees(t2) t3_deg = math.degrees(t3) # If you want full ellipse: # cv2.ellipse(img, (cx, cy), (a, b), 0, 0, 360, color, thickness) # Draw arc only (theta1 -> theta2) cv2.ellipse( img, (cx, cy), (a, b), 0, # rotation angle of ellipse t1_deg, # start angle t2_deg, # end angle color, thickness ) # Optionally draw second arc ¦È2 ¡ú ¦È3 cv2.ellipse( img, (cx, cy), (a, b), 0, t2_deg, t3_deg, (0, 255, 0), # different color for visualization thickness ) # Save output cv2.imwrite(output_path, img) print(f"[Saved] Arc drawn on image -> {output_path}") # Example usage: if __name__ == "__main__": params = [651.5971, 491.6041, 4.5752, 4.3241, 1.1640, 3.0971, 3.1106] draw_arc_on_image( image_path=r"/home/zhaoyinghan/下载/imageData.png", output_path="output_arc.png", params=params )