yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
MicroROS V2 Robot Car📖
01.Introduction
  • 0.Unboxing Video
  • 1. Readme Learning Route
  • 2. Must Read Before Use
  • 3. Introduction to MicroROS V2 Control Board
  • 4. Introduction to LiDAR
  • 5. Introduction to ESP32 Camera Module
  • 6. FAQ
  • 7. About Charging
02.Assembly course
  • Assembly Video
03.Preparation
  • 1. Quickly Start
  • 2. Write Firmware
  • 3. Install VM and Start System
  • 4. Configure VM and Connect Robot
  • 5. Connect to MicroROS Agent
04.Quick start control course
  • 1. VM Keyboard Remote Control
  • 2. VM Handle Remote Control
  • 3. USB Handle Control
05.Robot control course
  • 1. Robot Information Release
  • 2. Robot Keyboard Control
  • 3. Robot Handle Control
  • 4. Robot State Estimation
  • 5. Linear Speed Calibration
  • 6. Angular Velocity Calibration
  • 7. Robot URDF Model
06.Lidar course
  • 1. Precautions for LiDAR Mapping and Navigation
  • 2. Lidar Avoid
  • 3. Lidar Following
  • 4. Lidar Guard
  • 5. Lidar Patrol
  • 6. Gmapping Mapping
  • 7. Cartographer Mapping
  • 8. Cartographer Quickly Repositioning Navigation
  • 9. Slam Toolx Mapping
  • 10. Navigation2 Single Point Navigation
  • 11. Navigation2 Multi Point Navigation
  • 12. Ros Robot App Mapping And Navigation
07.Road network planning
  • 1. Introduction to Road Network Planning and Quick Start
  • 2. Build a Pose Map
  • 3. Road Network Annotation
  • 4. Planning and Navigation Between Road Networks
  • 5. Road Network Navigation in Any Pose
  • 6. Path Replanning
08.Vision basic course
OpenCV Image Processing
  • 1. Introduction to OpenCV Source CV
  • 2. Open Source CV Geometric Transformation
  • 3. Open Source CV Image Processing and Drawing Text Line Segments
  • 4. Open Source CV Image Beautification
09.Visual General Course (For Standard&Superior version)
4. Yolov11&26 Visual Recognition
  • 1. YOLO Environment Setup
  • 2. CLI Usage
  • 3. Object Detection
  • 4. Instance Segmentation
  • 5. Pose Estimation
  • 6. Image Classification
  • 7. Oriented Bounding Boxes Object Detection
  • 8. Model Prediction
1. ESP32 Visual Recognition Module Configuration
  • 1. Serial Port Configuration WiFi Instructions
  • 2. Use ESP32 Camera Module in Robot Car
  • 3. Servo PTZ Calibration
2. OpenCV Visual Recognition
  • 1. Human Pose Estimation
  • 2. Object Detection
  • 3. AR Vision
  • 4. QR Code
  • 5. Color Recognition
  • 6. Facial Recognition
  • 7. AprilTag Machine Code Recognition
3. Mediapipe Visual Recognition
  • 1. Hand Detection
  • 2. Pose Detection
  • 3. Holistic Detection
  • 4. Facial Detection
  • 5. Facial Recognition
  • 6. Facial Special Effects
  • 7. 3D Object Recognition
  • 8. Brush
  • 9. Gesture Recognition
  • 10. Palm Target Localization
  • 11. Fingertip Trajectory Recognition
10.Visual Advanced Course (Just for Standard version)
1. Visual Control
  • 1. QR Code Recognition Control Action
  • 2. AprilTag Control Car Action Group
  • 3. Gesture Control Car Action Group
  • 4. Visual Line Tracking
2. Visual Tracking
  • 1. Color Tracking
  • 2. Facial Tracking
  • 3. QR Code Tracking
  • 4. Object Recognition And Tracking
  • 5. Mediapipe Palm Tracking
  • 6. Mediapipe Gesture Tracking
  • 7. Mediapipe Human Pose Tracking
  • 8. KCF Object Tracking
  • 9. AprilTag Machine Code Tracking
3. Visual Following
  • 1. Color Follow
  • 2. Face Follow
  • 3. QR Code Follow
  • 4. Mediapipe Palm Follow
  • 5. Mediapipe Gesture Follow
  • 6. Mediapipe Human Posture Follow
  • 7. AprilTag Machine Code Follow
  • 8. Object Follow
11.Visual Advanced Course (Just for Superior version)
1. Visual Control
  • 1. QR Code Recognition Control Action
  • 2. AprilTag Control Car Action Group
  • 3. Gesture Control Car Action Group
  • 4. Visual Line Tracking
2. Visual Tracking
  • 1. Color Tracking
  • 2. Facial Tracking
  • 3. QR Code Tracking
  • 4. YOLO Object Recognition and Tracking
  • 5. Mediapipe Palm Tracking
  • 6. Mediapipe Gesture Tracking
  • 7. Mediapipe Human Pose Tracking
  • 8. KCF Object Tracking
  • 9. AprilTag Machine Code Tracking
3. Visual Follow
  • 1. Color Follow
  • 2. Face Follow
  • 3. QR Code Follow
  • 4. Mediapipe Palm Follow
  • 5. Mediapipe Gesture Follow
  • 6. Mediapipe Human Pose Follow
  • 7. AprilTag Machine Code Follow
  • 8. Object Follow
12.AI Large Model Basic and Applications Course
1. AI Large Model Preparation
  • 1.AI Large Model Preparation
2. AI Large Model Basic Course
  • 1. AI Large Model Types and Principles
  • 2. RAG Retrieval Augmented and Training Samples
  • 3. Embodied Intelligent System Architecture
  • 4. Embodied Intelligence Core Source Code
3. AI Large Model Development
  • 1. Register Model Service Account
  • 2. Configure API KEY
  • 3. Dify Introduction
  • 4. Dify Basic Features
  • 5. RAG Knowledge Base Deployment
  • 6. AI Application Development Chatbot
  • 7. RAG Knowledge Base and Chatbot
  • 8. AI Agent Workflow
4. AI Large Model (Text Version)
  • 1. Semantic Understanding and Instruction Following
  • 2. Multimodal Visual Understanding
  • 3. Multimodal Visual Understanding + Basic Control
  • 4. Multimodal Visual Understanding + Object Following
  • 5. Multimodal Visual Understanding + Visual Line Following
  • 6. Multimodal Visual Understanding + SLAM Navigation
  • 7. Multimodal Visual Understanding + SLAM Navigation + Visual Line Following
  • 8. Multimodal Visual Understanding + SLAM Navigation + Object Following
  • 9. Intent Inference + Multimodal Visual Understanding + SLAM Navigation
13.Openclaw Basics Course
  • 1. Openclaw Introduction
  • 2. Openclaw Core Concepts
  • 3. Openclaw Api-Key Configuration
  • 4. Openclaw Switching Models
  • 5. Openclaw System Prompt
  • 6. Openclaw Common CLI Command
14. Openclaw Interaction Course
  • 1. Openclaw Webchat Interaction
  • 2. Openclaw Tui Interaction
  • 3. Openclaw Whatsapp Interaction
15.Openclaw Development Course
  • 1. Openclaw Robot Mcp Service Integration
  • 2. Robot CLI Command Tools
  • 3. Robot-Control Plugin Tools
  • 4. Openclaw Skills Development
  • 5. Openclaw Scheduled Tasks
  • 6. Openclaw Multi Agent System
  • 7. Openclaw Proactive Interaction
  • 8. Openclaw Vector Memory
16.Openclaw Embodied Intelligence Course
  • 1. OpenClaw Natural Interaction + Basic Control
  • 2. OpenClaw Natural Interaction + Slam Navigation
  • 3. OpenClaw Natural Interaction + Multimodal Visual Understand
  • 4. OpenClaw Natural Interaction + Multimodal Visual Understand + Slam Navigation + Visual Follow
  • 5. OpenClaw Natural Interaction + Multimodal Visual Understand + Slam Navigation + Visual Track
17.Multi-machine Course
  • 1. Multi Machine Handle Control
  • 2. Multi Machine Keyboard Control
  • 3. Multi Machine Navigation
18.MicroROS-V2 Control Board Development Environment
  • 1. Set Up the ESP32-IDF Development Environment
  • 2. ESP32-IDF Configuration Tool
  • 3. ESP Flash Tool Flashing Firmware
  • 4. Install ESP32 Microros Components
  • 5. Install And Start Microros Agent
19.MicroROS-V2 Control Board ESP32 Basic Course
  • 1. Led Light Up
  • 2. Button Function
  • 3. Drive Buzzer
  • 4. Oled
  • 5. Usb Host Function
  • 6. Serial Communication
  • 7. Battery Voltage Detection
  • 8. Drive Pwm Servo
  • 9. Drive Motors
  • 10. Read Motor Encoder Data
  • 11. Pid Motor Speed Control
  • 12. Robot Kinematics Analysis Theory
  • 13. Read Imu Data
  • 14. Read Lidar Data
  • 15. Flash Data Storage
  • 16. Custom Partition Table
  • 17. Bluetooth Communication
  • 18. Wifi Connection
  • 19. ESP32 Visual Recognition Module
20.MicroROS-V2 Control Board Micro_ros Basic Course
  • 1. Publish Topics
  • 2. Subscribe To Topics
  • 3. Multi Topic Subscription And Publishing
  • 4. Subscribe To Buzzer Topic
  • 5. Subscribe To Pwm Servo Topic
  • 6. Subscribe To Speed Control Topic
  • 7. Publish Odometry Topic
  • 8. Publish Imu Data Topic
  • 9. Publish Lidar Data Topic
21. Linux System Course
  • 1.Introduction to Linux system
  • 2.Ubuntu file system
  • 3.Ubuntu common commands
  • 4.Ubuntu common editors
  • 5.Ubuntu software operation commands
  • 6.Virtual machine installation
  • 7.SSH remote control
  • 8.VNC remote control
  • 9.Transfer files remotely
  • 10.Driver library and communication
  • 11.Static IP and hotspot mode
  • 12.Bind device ID
  • 13.Capacity expansion and resource allocation
  • 14.Update system software sources
  • 15.Set root user password
  • 16.sudo free password
  • 17.Connect to WiFi network
  • 18.View system version
  • 19.Customized service management
  • 20.Back up system image
22.Docker Course
  • 1.Docker overview and docker installation
  • 2.Common commands for docker image containers
  • 3.Docker images deeply understand and publish images
23.ROS Basic Course
  • 1.Introduction to ROS2
  • 2.ROS2 install Humble
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
Download
  • Mapping_APP(iOS_Android)
  • Code
  • Software_Tools
  • VM_System_File
  • 3D_Model_File
  • ESP32_Firmware
  • Dify LLM Base
  • Instruction_Manual
  • VMware
Download ZIP

Welcome to MicroROS V2 Robot Car repository

3. Open Source CV Image Processing and Drawing Text Line Segments

Open Source CV Image Processing and Drawing Text Line Segments

1. Experiment Objective

Master the basic OpenCV image processing operations (grayscale conversion, binarization, edge detection) and drawing geometric annotations on images (lines, circles, rectangles, ellipses, polygons, text).

2. Experiment Principle

2.1 Keyword Explanation

KeywordDescription
Grayscale conversionConverts a BGR three-channel color image into a single-channel grayscale image, formula: Gray = 0.114B + 0.587G + 0.299R
BinarizationSplits the grayscale image into two classes of pixels, pure black (0) and pure white (255), based on a threshold, commonly used for target segmentation
Canny edge detectionMulti-stage algorithm: Gaussian blur noise reduction → gradient computation → non-maximum suppression → double threshold filtering, extracting object contours
Gaussian blurConvolves the image with a Gaussian kernel; the larger the kernel, the stronger the blur, used as a noise reduction preprocessing step

2.2 Technical Architecture

This experiment is a purely offline Python script, divided into two categories of operations:

  • Image processing (grayscale / binarization / edge detection): Performs global operations on pixel values to generate a new image matrix
  • Drawing annotations (line / circle / rectangle / ellipse / polygon / text): Modifies pixel values in place on the original image ndarray

Data flow: Local image → cv2.imread() → cv2.cvtColor() color space conversion → cv2.threshold() / cv2.Canny() image processing → cv2.line() / cv2.circle() and other drawing APIs → window display.

3. Experiment Steps

3.1 Hardware Preparation

HardwareRequirement
PTZ version✅ Supported
No-PTZ version✅ Supported
Required peripheralsNone (local image processing, no need to start the car)

3.2 Startup Method

Image processing category:

​x
# Grayscale conversion
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_image_grayscale_conversion.py
​
# Binarization
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_image_binarization_processing.py
​
# Edge detection
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_image_edge_detection.py

Drawing annotation category:

xxxxxxxxxx
# Line
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_draw_line.py
​
# Circle
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_draw_circle.py
​
# Rectangle
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_draw_rectangle.py
​
# Ellipse
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_draw_ellipse.py
​
# Polygon
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_draw_polygon.py
​
# Text
python3 ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_draw_text.py

3.3 Operation Instructions

The image processing scripts display the processed result side by side next to the original image; the drawing scripts overlay annotations on the original image and display a single window. Press the q key to close all windows.

3.4 Stop Method

Press the q key to close all OpenCV windows and exit the program.

4. Experiment Phenomena

  • Master image processing functions such as cv2.cvtColor(), cv2.threshold(), cv2.Canny()
  • Master drawing functions such as cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.polylines(), cv2.putText()

Original image: The input image for image processing and drawing; all effects are operated on and overlaid based on this image. Original image

Grayscale image: Uses cv2.cvtColor() to convert the BGR color image into a single-channel grayscale image, where each pixel retains only luminance information. Grayscale image

Binary image: Uses cv2.threshold() to split the grayscale image into pure black (0) and pure white (255) pixels based on a threshold. Binary image

Edge detection image: Before Canny edge detection, Gaussian blur is applied for noise reduction, then pixels with sharp luminance changes are extracted to form object contour lines. Edge detection image

Drawing a line: Uses cv2.line() to draw a line segment with a specified start and end point on the image; color and line width can be customized. Line

Drawing a circle: Uses cv2.circle() to draw a circle outline with a specified center and radius on the image. Circle

Drawing a rectangle: Uses cv2.rectangle() to draw a rectangle border with specified top-left and bottom-right corner coordinates on the image. Rectangle

Drawing an ellipse: Uses cv2.ellipse() to draw an ellipse arc with a specified center, axis lengths, and rotation angle on the image. Ellipse

Drawing a polygon: Uses cv2.polylines() to draw a closed polygon formed by sequentially connecting multiple vertex coordinates on the image. Polygon

Drawing text: Uses cv2.putText() to overlay text annotations on the image; position, font, size, and color can be customized. Text

5. Program Analysis

Source code paths:

  • Script directory: ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/
  • Test image: ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/images/yahboom.png

5.1 Core Logic Analysis

All scripts share a unified load-process-display framework. The core code for image processing and drawing annotations is shown below respectively.

Grayscale + binarization (opencv_image_binarization_processing.py)

xxxxxxxxxx
# Source file: ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_image_binarization_processing.py
import cv2
​
if __name__ == '__main__':
    img = cv2.imread('~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/images/yahboom.png', cv2.IMREAD_UNCHANGED)
    if img is None:
        print("Failed to read the image. Please check whether the images/yahboom.png path is correct")
        exit()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, thresh1 = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY_INV)
​
    while True:
        cv2.imshow("yahboom", img)
        cv2.imshow('yahboom_gray', gray)
        cv2.imshow("yahboom_binary", thresh1)
        action = cv2.waitKey(10) & 0xFF
        if action == ord('q') or action == 113:
            break
​
    cv2.destroyAllWindows()

Key logic explanation:

  • cv2.cvtColor(img, cv2.COLOR_BGR2GRAY): Converts BGR three channels into a single-channel grayscale, invoking the internal weighted formula
  • cv2.threshold(src, thresh, maxval, type): Pixels with a value > thresh(180) are set to maxval(255), otherwise set to 0
  • THRESH_BINARY_INV indicates inverted binarization (above the threshold becomes 0), making the dark logo the white foreground
  • ret returns the threshold actually used (equal to the passed thresh; it differs only in OTSU adaptive mode)

Canny edge detection (opencv_image_edge_detection.py)

xxxxxxxxxx
# Source file: ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/opencv_image_edge_detection.py
import cv2
​
if __name__ == '__main__':
    img = cv2.imread('~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/images/yahboom.png', cv2.IMREAD_UNCHANGED)
    if img is None:
        print("Failed to read the image. Please check whether the images/yahboom.png path is correct")
        exit()
​
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    imgG = cv2.GaussianBlur(gray, (3, 3), 0)
    dst = cv2.Canny(imgG, 50, 50)
​
    while True:
        cv2.imshow("yahboom", img)
        cv2.imshow('yahbeeom_gray', gray)
        cv2.imshow("yahboom_canny", dst)
        action = cv2.waitKey(10) & 0xFF
        if action == ord('q') or action == 113:
            break
​
    cv2.destroyAllWindows()

Key logic explanation:

  • The image must be converted to grayscale before edge detection (Canny requires single-channel input)
  • cv2.GaussianBlur(gray, (3,3), 0): 3×3 Gaussian kernel convolution for noise reduction, suppressing high-frequency noise to avoid false detections
  • cv2.Canny(img, 50, 50): threshold1=50 (low threshold; below this value is definitely not an edge), threshold2=50 (high threshold; above this value is definitely an edge). Values in between are judged based on connectivity to strong edges
  • Note: Setting both thresholds to the same value 50 limits the algorithm's effectiveness; in practice the low threshold is usually set to 1/2~1/3 of the high threshold

Drawing API summary (opencv_draw_line.py / opencv_draw_circle.py / opencv_draw_rectangle.py / opencv_draw_text.py)

The following shows how each drawing function is called; all of them modify the original image ndarray in place:

xxxxxxxxxx
# Source file: ~/microros_ws/src/microros_v2_opencv_base_pkg/scripts/opencv_image_processing_and_drawing/
# See the comments on each function for the specific source file
​
# Line: start (50,20) → end (20,100), color (255,0,255)=magenta, line width 10
cv2.line(img, (50, 20), (20, 100), (255, 0, 255), 10)
​
# Circle: center (80,80), radius 50, color magenta, line width 10 (negative value fills it solid)
cv2.circle(img, (80, 80), 50, (255, 0, 255), 10)
​
# Rectangle: top-left (50,20) → bottom-right (100,100), color magenta, line width 10
cv2.rectangle(img, (50, 20), (100, 100), (255, 0, 255), 10)
​
# Ellipse: center (80,80), axes (20,50), angle 0, start angle 0°, end angle 360°, color magenta, line width 5
cv2.ellipse(img, (80, 80), (20, 50), 0, 0, 360, (255, 0, 255), 5)
​
# Polygon: vertex array (5 points), isClosed=True, color magenta, line width 5
points = np.array([[120, 50], [40, 140], [120, 70], [110, 110], [50, 50]], np.int32)
cv2.polylines(img, [points], True, (255, 0, 255), 5)
​
# Text: content 'This is Yahboom!', bottom-left coordinate (50,50), font, scale 1.0, color (0,200,0), line width 2
cv2.putText(img, 'This is Yahboom!', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 200, 0), 2)

Common rules for shape drawing:

  • The color parameter is a BGR triplet; (255, 0, 255) is magenta
  • The thickness parameter: a positive value is the line width (in pixels); a negative value (such as -1) fills the shape solid
  • The coordinate origin is the top-left corner of the image, with the x axis pointing right and the y axis pointing down
  • All drawing functions return the drawn ndarray (i.e., the same object modified in place)

5.2 Key Parameters

ParameterTypeDefault valueDescription
cv2.threshold threshint180Binarization threshold; pixels greater than this value are mapped to maxval
cv2.threshold maxvalint255The target value for pixels exceeding the threshold
cv2.Canny threshold1int50Low threshold (below this value is definitely not an edge)
cv2.Canny threshold2int50High threshold (above this value is definitely an edge)
cv2.GaussianBlur ksizetuple(3,3)Gaussian kernel size; must be odd, the larger it is the stronger the blur
Drawing thicknessint5~10Line width; a negative value means fill solid

5.3 Node Explanation

This experiment is a pure Python script and does not use any ROS2 nodes.

6. Common Issues

IssueCauseSolution
Garbled Chinese charactersOpenCV does not support Chinese rendering by defaultUse PIL or freetype to support Chinese
Text does not displayText color is the same as the backgroundChoose a text color with high contrast
Canny edge detection result is all blackBoth thresholds are set too high, suppressing all gradientsLower threshold1 and threshold2
Binarization result is all white or all blackThreshold is set improperlyFirst view the grayscale image with cv2.imshow, then adjust the threshold based on the pixel distribution
Open Source CV Geometric Transformation
Open Source CV Image Beautification

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文