Image processing and object detection techniques used in e-Yantra tasks.
OpenCV Basics
python
import cv2
import numpy as np
img = cv2.imread('robot.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)Color Segmentation (HSV)
python
def detect_color(frame, lower_hsv, upper_hsv):
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_hsv, upper_hsv)
return mask, cv2.bitwise_and(frame, frame, mask=mask)
lower_red = np.array([0, 120, 70])
upper_red = np.array([10, 255, 255])
mask, result = detect_color(frame, lower_red, upper_red)Common HSV Ranges
| Color | Lower HSV | Upper HSV |
|---|---|---|
| Red | [0, 120, 70] | [10, 255, 255] |
| Green | [36, 100, 100] | [86, 255, 255] |
| Blue | [94, 80, 2] | [126, 255, 255] |
| Yellow | [22, 93, 0] | [45, 255, 255] |
ArUco Marker Detection
python
import cv2
import cv2.aruco as aruco
def detect_aruco(frame):
aruco_dict = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
detector = aruco.ArucoDetector(aruco_dict, aruco.DetectorParameters())
corners, ids, _ = detector.detectMarkers(frame)
if ids is not None:
aruco.drawDetectedMarkers(frame, corners, ids)
return frame, idsROS 2 Camera Subscriber
python
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import rclpy
from rclpy.node import Node
import cv2
class CameraNode(Node):
def __init__(self):
super().__init__('camera_node')
self.bridge = CvBridge()
self.create_subscription(Image, '/camera/image_raw', self.callback, 10)
def callback(self, msg):
frame = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')
cv2.imshow('Camera', frame)
cv2.waitKey(1)