import cv2
import numpy as np

# Set up the camera capture
cap = cv2.VideoCapture(0)

while True:
    # Capture the frame from the camera
    _, frame = cap.read()

    # Convert the frame to HSV color space
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # Define the lower and upper bounds for the red color
    lower_red = np.array([0,100,100])
    upper_red = np.array([10,255,255])

    # Create a mask for the red color
    mask = cv2.inRange(hsv, lower_red, upper_red)

    # Use the mask to detect red circles in the frame
    circles = cv2.HoughCircles(mask, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)

    # Check if any circles were detected
    if circles is not None:
        # Convert the circles array to integer coordinates
        circles = np.round(circles[0, :]).astype("int")

        # Loop through all circles
        for (x, y, r) in circles:
            # Calculate the area of the circle
            area = np.pi * r**2

            # Draw the circle on the frame
            cv2.circle(frame, (x, y), r, (0, 255, 0), 2)

            # Print the area and position of the circle
            print("Circle at (x={}, y={}) with area={:.2f}".format(x, y, area))

    # Show the frame
    cv2.imshow("Frame", frame)

    # Wait for the user to press a key
    key = cv2.waitKey(1) & 0xFF

    # If the user pressed "q", break the loop
    if key == ord("q"):
        break

# Release the camera and destroy the windows
cap.release()
cv2.destroyAllWindows()


import cv2
import numpy as np

# Set up the camera capture
cap = cv2.VideoCapture(0)

while True:
    # Capture the frame from the camera
    _, frame = cap.read()

    # Convert the frame to HSV color space
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # Define the lower and upper bounds for the red color
    lower_red = np.array([0,100,100])
    upper_red = np.array([10,255,255])

    # Create a mask for the red color
    mask = cv2.inRange(hsv, lower_red, upper_red)

    # Use the mask to detect red circles in the frame
    circles = cv2.HoughCircles(mask, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)

    # Check if any circles were detected
    if circles is not None:
        # Convert the circles array to integer coordinates
        circles = np.round(circles[0, :]).astype("int")

        # Initialize the highest intensity to zero
        highest_intensity = 0

        # Initialize the highest intensity circle to None
        highest_intensity_circle = None

        # Loop through all circles
        for (x, y, r) in circles:
            # Calculate the area of the circle
            area = np.pi * r**2

            # Crop the region of interest around the circle
            roi = frame[y-r:y+r, x-r:x+r]

            # Calculate the mean intensity of the ROI
            intensity = np.mean(roi)

            # Check if this circle has the highest intensity so far
            if intensity > highest_intensity:
                # Update the highest intensity and highest intensity circle
                highest_intensity = intensity
                highest_intensity_circle = (x, y, r)

        # Check if a highest intensity circle was found
        if highest_intensity_circle is not None:
            # Unpack the highest intensity circle coordinates
            x, y, r = highest_intensity_circle

            # Draw the circle on the frame
            cv2.circle(frame, (x, y), r, (0, 255, 0), 2)

            # Print the area and position of the circle
            print("Circle at (x={}, y={}) with area={:.2f} and intensity={:.2f}".format(x, y, area, highest_intensity))

    # Show the frame
    cv2.imshow("Frame", frame)

    # Wait for the user to press a key
    key = cv2.waitKey(1) & 0xFF

    # If the user pressed "q", break the loop
    if key == ord("q"):
        break

# Release the camera and destroy the windows
cap.release()
cv2.destroyAllWindows()