Skip to content

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

ColorLower HSVUpper 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, ids

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

References

Released under the MIT License.