Circle_Detection_OpenCV/red.py
2023-01-04 23:40:05 +03:00

129 lines
3.9 KiB
Python

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()