username fix & file cleanup
This commit is contained in:
parent
7e12b0fcda
commit
1183addab3
|
|
@ -1,95 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import rospy
|
||||
from geometry_msgs.msg import Point
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
def nothing(x):
|
||||
pass
|
||||
|
||||
# Initialize the ROS node
|
||||
rospy.init_node('ball_tracking_node', anonymous=True)
|
||||
|
||||
# Create a ROS publisher for the ball's coordinates
|
||||
coord_pub = rospy.Publisher('/ball_coordinates', Point, queue_size=10)
|
||||
|
||||
# Create a window for the trackbars
|
||||
cv2.namedWindow('settings')
|
||||
|
||||
# Create trackbars for adjusting the HSV range
|
||||
cv2.createTrackbar('Lower-H', 'settings', 0, 179, nothing)
|
||||
cv2.createTrackbar('Lower-S', 'settings', 100, 255, nothing)
|
||||
cv2.createTrackbar('Lower-V', 'settings', 100, 255, nothing)
|
||||
cv2.createTrackbar('Upper-H', 'settings', 22, 179, nothing)
|
||||
cv2.createTrackbar('Upper-S', 'settings', 255, 255, nothing)
|
||||
cv2.createTrackbar('Upper-V', 'settings', 255, 255, nothing)
|
||||
|
||||
# Attempt to open the video capture
|
||||
cap = cv2.VideoCapture(0)
|
||||
|
||||
# Check if the camera opened successfully
|
||||
if not cap.isOpened():
|
||||
print("Error: Could not open camera.")
|
||||
exit()
|
||||
|
||||
while not rospy.is_shutdown():
|
||||
# Capture frame-by-frame
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
print("Can't receive frame (stream end?). Exiting ...")
|
||||
break
|
||||
|
||||
# Convert the captured frame to HSV
|
||||
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
|
||||
|
||||
# Get the current positions of the trackbars
|
||||
lh = cv2.getTrackbarPos('Lower-H', 'settings')
|
||||
ls = cv2.getTrackbarPos('Lower-S', 'settings')
|
||||
lv = cv2.getTrackbarPos('Lower-V', 'settings')
|
||||
uh = cv2.getTrackbarPos('Upper-H', 'settings')
|
||||
us = cv2.getTrackbarPos('Upper-S', 'settings')
|
||||
uv = cv2.getTrackbarPos('Upper-V', 'settings')
|
||||
|
||||
# Define the HSV range for the orange color
|
||||
lower_orange = np.array([lh, ls, lv])
|
||||
upper_orange = np.array([uh, us, uv])
|
||||
|
||||
# Threshold the HSV image to only get the orange colors
|
||||
mask = cv2.inRange(hsv, lower_orange, upper_orange)
|
||||
res = cv2.bitwise_and(frame, frame, mask=mask)
|
||||
|
||||
# Find contours in the mask
|
||||
contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||
center = None
|
||||
|
||||
if contours:
|
||||
# Find the largest contour in the mask
|
||||
c = max(contours, key=cv2.contourArea)
|
||||
((x, y), radius) = cv2.minEnclosingCircle(c)
|
||||
|
||||
if radius > 10: # Minimum radius threshold
|
||||
# Draw the circle and centroid on the frame
|
||||
cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)
|
||||
center = (int(x), int(y))
|
||||
cv2.circle(frame, center, 5, (0, 0, 255), -1)
|
||||
|
||||
# Publish the ball's coordinates
|
||||
point_msg = Point()
|
||||
point_msg.x = x
|
||||
point_msg.y = y
|
||||
point_msg.z = 0 # Z-coordinate is not applicable here
|
||||
coord_pub.publish(point_msg)
|
||||
|
||||
# Display the original and the result
|
||||
cv2.imshow('frame', frame)
|
||||
cv2.imshow('mask', mask)
|
||||
cv2.imshow('res', res)
|
||||
|
||||
if cv2.waitKey(1) & 0xFF == 27: # ESC key to break
|
||||
break
|
||||
|
||||
# When everything done, release the capture and destroy all windows
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
||||
#Minabebis :3
|
||||
Loading…
Reference in New Issue