yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
K230 Vision Module📖
1. Quick Start
  • 0.Get start
  • 1. K230 firmware download and burning
  • 2. Install the programming environment
  • 3. Debug and run routines
  • 4. Offline running routine
  • 5. Micropython Quick Start
  • 6. GUI Program Instructions
  • 7.K230 module bracket installation tutorial
  • 8.K230 module 2DOF PTZ installation tutorial
2. Basic Courses
  • 1.FPIOA pin assignment
  • 2.RGB lights
  • 3.Buzzer
  • 4.Buttons
  • 5.Serial communication
  • 6.I2C communication
  • 7.PWM
  • 8.WDT watchdog
  • 9.Timer
  • 10.Fourier Transform
  • 11.SHA256 encryption
  • 12.AES encryption
  • 13.Multithreading
  • 14.File reading and writing
  • 15.Image Display
  • 16.Touch Display
  • 17.Camera display
  • 18.Image Flip
  • 19.Camera
3. Draw the image
  • 1. Draw the lines
  • 2. Draw the circle
  • 3. Draw the rectangle
  • 4. Draw the ellipse
  • 5. Draw the arrow
  • 6. Draw the crosshairs
  • 7. Draw text
  • 8. Draw key points
4. Graphics detection
  • 1. Line segment detection
  • 2. Rectangle Detection
  • 3. Circle detection
  • 4. Object edge detection
  • 5. Line inspection basics:fast linear regression
5. Color recognition
  • 1. Color recognition
  • 2. Object Counting
  • 3. Multi-color recognition
  • 4. K230 Color Line Patrol
6.1 CV_lite Image Processing Special Topic
  • 1.Introduction to cv_litenew
  • 2.cv_lite API Reference Manualnew
  • 3.Color Block Recognition - Grayscale Imagenew
  • 4.Color Block Recognition - Color Imagenew
  • 5.Circle Recognition - Grayscale Imagenew
  • 6.Circle Recognition - Color Imagenew
  • 7.Corner Recognition - Grayscale Imagenew
  • 8.Corner Recognition - Color Imagenew
  • 9.Edge Recognition - Grayscale Imagenew
  • 10. Edge Recognition - Color Imagenew
  • 11. Rectangle Recognition - Grayscale Imagenew
  • 12.Rectangle Recognition - Color Imagenew
  • 13.Rectangle recognition combined with corner recognition - grayscale imagenew
  • 14.Rectangle recognition combined with corner recognition - color imagenew
  • 15.Image Binarization - Grayscalenew
  • 16.Image Binarization - Color Imagenew
  • 17.Exposure Adjustmentnew
  • 18.Image Black Hat Operationsnew
  • 19.Image Color Histogramnew
  • 20.Image Closingnew
  • 21.Image Expansionnew
  • 22.Image Corrosionnew
  • 23.Gaussian Blurnew
  • 24.Gradient Transformationnew
  • 25.Mean Fuzzynew
  • 26.Image Openingnew
  • 27.Image Top Hat Operationnew
  • 28.PnP rangingnew
  • 29.Find rectangles and measure distancesnew
  • 30.Image grayscale world white balancenew
6.2 OpenCV Image Processing Special Topicnew
  • 1. OpenCV Introduction
  • 2. OpenCV API Reference
  • 3. Image Basic Transforms
  • 4. Morphological Operations
  • 5. Color Segmentation and Shape Classification
  • 6. Corner and Centroid Detection
  • 7. Hough Circle Detection
  • 8. Hough Line Detection
  • 9. Contour Analysis
  • 10. Drawing Functions
  • 11. Template Matching
  • 12. Image Blur Filtering
  • 13. Edge Detection
  • 14. Thresholding
  • 15. Color Segmentation
  • 16. Histogram and Pixel Transformation
  • 17. Arithmetic and Bitwise Operations
  • 18. Channel Operation and Statistics
  • 19. Image File Read and Write
  • 20. Pixel Level Transformation
7. Code type recognition
  • 1.Barcode recognition
  • 2.QR code recognition
  • 3.AprilTag tag recognition
  • 4.DM code recognition
8. Face Recognition
  • 1.[Must-read] General code structure and prerequisite knowledge of AI vision routines
  • 2.Face Detection
  • 3.Facial key point recognition
  • 4.Face orientation detection
  • 5.Face 3D Network
  • 6.Gaze direction detection
  • 7.Register for face recognition
9. Human body characteristics
  • 1. Human body detection
  • 2. Human key point detection
  • 3. Human posture recognition
  • 4. Fall detection
  • 5. Palm detection
  • 6. Palm key point detection
  • 7. Palm key point classification
  • 8. Gesture Recognition
  • 9. Dynamic gesture recognition
  • 10. Rock, Paper, Scissors
10. Scenario Application
  • 1.OCR character detection
  • 2.OCR character recognition
  • 3.yolov8n target detection
  • 4.yolov8n segmentation
  • 5. Self-learning object recognition
  • 6. License plate detection
  • 7. License Plate Recognition
  • 8. Target Tracking
  • 9. Fruit classification
  • 10. Garbage classification
  • 11. Road sign recognition
11. Audio and video processing
  • 1. Audio Recording
  • 2. Play Audio
  • 3. Video Recording
  • 4. Play Video
  • 5. Keyword wake-up
12. Network Basics
  • 1. Wireless network connection
  • 2. AP hotspot mode
  • 3. TCP-Server Example
  • 4. TCP-Client Example
  • 5. UDP-Server Example
  • 6. UDP-Client Example
  • 7. HTTP-Server Example
  • 8. HTTP-Client Example
  • 9. MQTT Quick Start
  • 10. MQTT-Publisher
  • 11. MQTT-Subscriber
  • 12. RTSP real-time image transmission
  • 13. RTSP real-time image transmission combined with AIDemo
  • 14. Call OpenRouter large model aggregation service
  • 15. Open the Resource Monitoring Panel
13. LVGL Graphical Interface
  • 1. Introduction to LVGL
  • 2. Create a button
  • 3. Create a slider
  • 4. Create an Image
  • 5. Create a text box and keyboard
14. GUI Code Tutorial & Secondary Development
  • 01.GUI System Architecture
  • 02.Core Engine Initialization
  • 03.Application Discovery Mechanism in GUI
  • 04.Desktop Layout Algorithm
  • 05.Advanced UI Styling
  • 06.BaseApp Base Class Analysis
  • 07.Hello_World Practical
  • 08.GUI Application Lifecycle and Resource Management
15. Train your own model
  • 1. Local deployment of yolo training environment
  • 2. Use online platforms for training
16.Touch Course
  • 1.Touch point detectionnew
  • 2.Touch Paintingnew
  • 3.Touch to take a photonew
17. Multi-master communication (purchased separately)
ESP32-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
Jetson-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
MSPM0G3507-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
Pico-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
raspberrypi-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
RDK-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
STM32-K230
  • 1. stm32_k230 color recognition
  • 2. stm32_k230 barcode recognition
  • 3. stm32_k230 QR code recognition
  • 4. stm32_k230Apriltag code recognition
  • 5. stm32_k230DM code recognition
  • 6. stm32_k230 face detection
  • 7.stm32_k230 looking direction
  • 8. stm32_k230 face recognition
  • 9. stm32_k230 human body detection
  • 10. stm32_k230 fall detection
  • 11. stm32_k230 palm detection
  • 12. stm32_k230 gesture recognition
  • 13. stm32_k230OCR character recognition
  • 14. stm32_k230 object detection
  • 15. stm32_k230 target tracking
  • 16. stm32_k230 self-learning object recognition
  • 17.stm32_k230 license plate recognition
Arduino-K230
  • 1.arduino_k230 color recognition
  • 2.arduino_k230 barcode recognition
  • 3.arduino_k230 QR code recognition
  • 4.arduino_k230 Apriltag code recognition
  • 5.arduino_k230 DM code recognition
  • 6.arduino_k230 face detection
  • 7.arduino_k230 looking direction
  • 8.arduino_k230 face recognition
  • 9.arduino_k230 human body detection
  • 10.arduino_k230 fall detection
  • 11.arduino_k230 palm detection
  • 12.arduino_k230 gesture recognition
  • 13.arduino_k230 OCR character recognition
  • 14.arduino_k230 object detection
  • 15.arduino_k230 target tracking
  • 16.arduino_k230 self-learning object recognition
  • 17.arduino_k230 license plate recognition
Microbit-K230
  • 1.microbit_k230 color recognition
  • 2.microbit_k230 barcode recognition
  • 3.microbit_k230 QR code recognition
  • 4.microbit_k230 Apriltag code recognition
  • 5.microbit_k230 DM code recognition
  • 6.microbit_k230 face detection
  • 7.microbit_k230 looking direction
  • 8.microbit_k230 face recognition
  • 9.microbit_k230 human body detection
  • 10.microbit_k230 fall detection
  • 11.microbit_k230 palm detection
  • 12.microbit_k230 gesture recognition
  • 13.microbit_k230 OCR character recognition
  • 14.microbit_k230 object detection
  • 15.microbit_k230 target tracking
  • 16.microbit_k230 self-learning object recognition
  • 17.microbit_k230 license plate recognition
MSPM0G3519-K230
  • 1. K230 Color Recognitionnew
  • 2. K230 Barcode Recognitionnew
  • 3. K230 QR Code Recognitionnew
  • 4. K230 Apriltag Code Recognitionnew
  • 5. K230 DM Code Recognitionnew
  • 6. K230 Face Detectionnew
  • 7. K230 Gaze Directionnew
  • 8. K230 Face Recognitionnew
  • 9. K230 Human Body Detectionnew
  • 10. K230 Fall Detectionnew
  • 11. K230 Palm Detectionnew
  • 12. K230 Gesture Recognitionnew
  • 13. K230 OCR Character Recognitionnew
  • 14. K230 Object Detectionnew
  • 15. K230 Target Trackingnew
  • 16. K230 Self-learning Object Recognitionnew
  • 17. K230 License Plate Recognitionnew
18.Extension case (purchase separately)
For 2DOF Electric Platform
  • 1.Moving target control and automatic tracking system
  • 2.Human body recognition alarm
  • 3.Gesture Recognition
  • 4.Rock Paper Scissors
  • 5.Fruit sorting
  • 6.Color Tracking
  • 7.Face Tracking
MSPM0G3507 wheeled chassis V1/V2 combined with K230 application case
  • 1.Visual tracking
  • 2.Color tracking
  • 3.Color response
  • 4.Road sign recognition
  • 5.Machine code tracking
  • 6.QR code recognition action
  • 7.Autonomous avoid
  • 8.License plate tracking
  • 9.Face tracking
  • 10.Gaze direction tracking
  • 11.Palm tracking
  • 12.Target tracking
  • 13.Human body tracking
  • 14.OCR character recognition action
STM32 wheeled chassis V1/V2 combined with K230 application case
  • 1.Visual tracking
  • 2.Color tracking
  • 3.Color response
  • 4.Road sign recognition
  • 5.Machine code tracking
  • 6.QR code recognition action
  • 7.Autonomous avoid
  • 8.License plate tracking
  • 9.Face tracking
  • 10.Gaze direction tracking
  • 11.Palm tracking
  • 12.Target tracking
  • 13.Human body tracking
  • 14.OCR character recognition action
MSPM0G3519 wheeled chassis V1/V2 combined with K230 application case
  • 1.Visual trackingnew
  • 2.Color trackingnew
  • 3.Color responsenew
  • 4.Road sign recognitionnew
  • 5.Machine code trackingnew
  • 6.QR code recognition actionnew
  • 7.Autonomous avoidnew
  • 8.License plate trackingnew
  • 9.Face trackingnew
  • 10.Gaze direction trackingnew
  • 11.Palm trackingnew
  • 12.Target trackingnew
  • 13.Human body trackingnew
  • 14.OCR character recognition actionnew
19. Expansion case(purchase separately)new
  • 1.Motion target control and Auto track system
  • 2.Vehicle-mounted balance ball motion control system
Download
  • Manual
  • CanMV IDE
  • Software Tools
  • Firmware
  • Source Code
  • Appendix
Download ZIP

Welcome to K230 Vision Module repository

2. OpenCV API Reference

K230 OpenCV (cv2) API Reference

Based on K230 CanMV firmware, referencing original OpenCV demos and opencv_demo collection ⚠️ K230 specific limitations marked | 📎 Source code examples included


Color Space Conversion

FunctionSignatureExample Files
cvtColorcv2.cvtColor(src, code)01, 02, 13
COLOR_BGR2GRAYBGR→Grayscale, most commonly used 
COLOR_BGR2HSVBGR→HSV, for color segmentation 

Example

xxxxxxxxxx
# BGR → Grayscale (preprocessing for edge detection, thresholding, etc.)
gray = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)

# BGR → HSV (must convert before inRange color segmentation)
hsv = cv2.cvtColor(img_np, cv2.COLOR_BGR2HSV)

Geometric Transformation

FunctionSignatureExample Files
resizecv2.resize(src, (w, h))01
flipcv2.flip(src, 1) 1=horizontal01
warpAffinecv2.warpAffine(src, M, (w, h))01
getRotationMatrix2Dcv2.getRotationMatrix2D((cx, cy), angle, scale)01

Example

xxxxxxxxxx
# Horizontal flip
img_np[:,:,:] = cv2.flip(img_np, 1)

# Rotate 45 degrees + scale 0.7x
M = cv2.getRotationMatrix2D((W//2, H//2), 45, 0.7)
img_np[:,:,:] = cv2.warpAffine(img_np, M, (W, H))

# Downsample for speed (commonly used for heavy operations like HoughCircles/matchTemplate)
small = cv2.resize(img_np, (320, 240))
gray = cv2.cvtColor(small, cv2.COLOR_BGR2GRAY)

Thresholding

FunctionSignatureExample Files
thresholdcv2.threshold(src, thresh, maxval, type)02, 12
THRESH_BINARY>thresh → maxval 
THRESH_OTSUAutomatically calculate optimal threshold 
adaptiveThresholdcv2.adaptiveThreshold(src, maxVal, method, type, blockSize, C)12

Example

xxxxxxxxxx
# Fixed threshold 127
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# OTSU automatic threshold (works better when grayscale brightness is uneven)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)

# Adaptive Gaussian threshold (scenarios with local illumination changes)
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                cv2.THRESH_BINARY, 11, 2)

Filtering (Blurring)

FunctionSignatureExample Files
GaussianBlurcv2.GaussianBlur(src, (k,k), sigma)05, 07, 10
blurcv2.blur(src, (k,k))10
medianBlurcv2.medianBlur(src, k)10
bilateralFiltercv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)10
filter2Dcv2.filter2D(src, ddepth, kernel)10

Example

xxxxxxxxxx
# Gaussian blur for denoising (required before Hough detection)
blur = cv2.GaussianBlur(gray, (7, 7), 1.5)

# Median blur (remove salt-and-pepper noise)
out = cv2.medianBlur(img_np, 7)

# Custom sharpening kernel
sharpen = np.array([[-1.0,-1.0,-1.0],[-1.0,9.0,-1.0],[-1.0,-1.0,-1.0]])
out = cv2.filter2D(img_np, -1, sharpen)

Edge Detection

FunctionSignatureExample Files
Cannycv2.Canny(src, low, high)06, 11
Sobelcv2.Sobel(src, ddepth, dx, dy)11
Laplaciancv2.Laplacian(src, ddepth)11

Example

xxxxxxxxxx
# Canny dual threshold edge detection
edges = cv2.Canny(gray, 80, 200)

# Grayscale output → display
img_out = image.Image(W, H, image.GRAYSCALE, alloc=image.ALLOC_REF, data=edges)
Display.show_image(img_out)

# Color overlay output (white edges + original image)
edges = cv2.Canny(gray, 80, 200)
img_np[:,:,0] = cv2.add(img_np[:,:,0], edges)  # B channel
img_np[:,:,1] = cv2.add(img_np[:,:,1], edges)  # G channel
img_np[:,:,2] = cv2.add(img_np[:,:,2], edges)  # R channel
Display.show_image(img)

Morphology

FunctionSignatureExample Files
getStructuringElementcv2.getStructuringElement(shape, (k,k))02
erodecv2.erode(src, kernel)02
dilatecv2.dilate(src, kernel)02
morphologyExcv2.morphologyEx(src, op, kernel)02, 07, 13
MORPH_OPENOpening (denoising) 
MORPH_CLOSEClosing (hole filling) 

Example

xxxxxxxxxx
# Create structuring elements
kr = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))     # Rectangular kernel
ke = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))  # Elliptic kernel

# Morphological operations on binary images
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kr)    # Closing for hole filling
opened = cv2.morphologyEx(binary, cv2.MORPH_OPEN, ke)     # Opening for denoising

Contour Analysis

FunctionSignatureExample Files
findContourscv2.findContours(src, mode, method)03, 04, 07
contourAreacv2.contourArea(cnt)03, 04, 07
arcLengthcv2.arcLength(cnt, closed)03, 04, 07
boundingRectcv2.boundingRect(cnt)03, 07
approxPolyDPcv2.approxPolyDP(cnt, epsilon, closed)03, 04, 07
⚠️ K230 returns (N,2)Use pt[0] for index, not pt[0][0] 
drawContourscv2.drawContours(img, contours, idx, color, thickness)03, 04, 07
convexHullcv2.convexHull(cnt)07
minEnclosingCirclecv2.minEnclosingCircle(cnt)07
momentscv2.moments(cnt)04

Example

xxxxxxxxxx
# Complete contour pipeline
contours, _ = cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt_limit = 0
for c in contours:
    area = cv2.contourArea(c)
    if area < 500: continue
    cnt_limit += 1
    if cnt_limit > 50: break              # Upper limit to prevent memory overflow

    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02 * peri, True)   # Polygon approximation

    x, y, w, h = cv2.boundingRect(c)
    cv2.drawContours(img_np, [approx], -1, (0, 255, 0), 2)
    cv2.rectangle(img_np, (x, y), (x + w, y + h), (0, 0, 255), 1)
    cnt_n += 1

# moments for centroid calculation
m = cv2.moments(c)
if m["m00"] > 0:
    cx = int(m["m10"] / m["m00"])
    cy = int(m["m01"] / m["m00"])

Feature Detection

FunctionSignatureExample Files
HoughLinescv2.HoughLines(edges, rho, theta, threshold)06
⚠️ K230 returns (N,2)lines[i,0]=rho, lines[i,1]=theta 
HoughLinesPcv2.HoughLinesP(edges, rho, theta, thr, minLen, maxGap)06
HoughCirclescv2.HoughCircles(src, method, dp, minDist, param1, param2, minR, maxR)05
⚠️ K230 returns (N,3)circles[i,0]=x, [i,1]=y, [i,2]=r 
matchTemplatecv2.matchTemplate(src, templ, method)09

Example

xxxxxxxxxx
# Hough circle detection (downsampled for speed)
small = cv2.resize(img_np, (320, 240))
gray = cv2.cvtColor(small, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (7, 7), 1.5)
circles = cv2.HoughCircles(blur, 3, dp=1, minDist=60, param1=100,
                            param2=70, minRadius=10, maxRadius=100)
if circles is not None:
    for i in range(circles.shape[0]):
        if i >= 30: break
        x = int(circles[i, 0]) * 2    # K230 returns (N,3), not (N,1,3)
        y = int(circles[i, 1]) * 2    # Coordinates ×2 back to 640x480
        r = int(circles[i, 2]) * 2
        cv2.circle(img_np, (x, y), 3, (0, 255, 0), -1)
        cv2.circle(img_np, (x, y), r, (0, 0, 255), 2)

# Template matching
rmap = cv2.matchTemplate(binary, templ, cv2.TM_CCOEFF_NORMED)
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(rmap)
if maxVal > 0.6:
    cv2.rectangle(img_np, (maxLoc[0], maxLoc[1]),
                  (maxLoc[0] + TS, maxLoc[1] + TS), (0, 255, 0), 2)

Color Processing

FunctionSignatureExample Files
inRangecv2.inRange(src, lower, upper)03, 13

Example

xxxxxxxxxx
# HSV color segmentation + green overlay
hsv = cv2.cvtColor(img_np, cv2.COLOR_BGR2HSV)
lo = np.array([35, 60, 60])   # Green HSV lower bound
hi = np.array([85, 255, 255]) # Green HSV upper bound
mask = cv2.inRange(hsv, lo, hi)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, ke)   # Opening for denoising
img_np[:,:,1] = cv2.add(img_np[:,:,1], mask)        # Green channel overlay

Arithmetic and Bitwise Operations

FunctionSignatureExample Files
addcv2.add(src1, src2)13, 15
⚠️ Does not support scalar broadcastingBoth arrays must have the same size 
absdiffcv2.absdiff(src1, src2)15
addWeightedcv2.addWeighted(src1, a, src2, b, gamma)15
bitwise_notcv2.bitwise_not(src)15
bitwise_andcv2.bitwise_and(src1, src2)15
bitwise_orcv2.bitwise_or(src1, src2)13, 15
bitwise_xorcv2.bitwise_xor(src1, src2)15

Example

xxxxxxxxxx
# Frame difference (motion detection)
if prev_np is not None:
    out = cv2.absdiff(img_np, prev_np)
    img_np[:,:,:] = out

# Inversion (negative effect)
img_np[:,:,:] = cv2.bitwise_not(img_np)

# ⚠️ add requires same-size arrays (scalar broadcasting not supported)
# Wrong: cv2.add(img_np, 50)
# Correct: pre-allocate same-size array
add50 = np.zeros((H, W, 3), dtype=np.uint8)
for c in range(W): add50[:, c, :] = 50
out = cv2.add(img_np, add50_3ch)

Pixel Transform

FunctionSignatureExample Files
equalizeHistcv2.equalizeHist(src)14
normalizecv2.normalize(src, alpha, beta, norm_type)14
convertScaleAbscv2.convertScaleAbs(src, alpha, beta)14, 17
LUTcv2.LUT(src, lut)14, 17

Example

xxxxxxxxxx
# Histogram equalization (enhance contrast)
out = cv2.equalizeHist(gray)

# convertScaleAbs: contrast ×1.5 brightness -30
out = cv2.convertScaleAbs(gray, alpha=1.5, beta=-30)

# LUT inversion mapping
lut = np.zeros((256, 1), dtype=np.uint8)
for i in range(256): lut[i, 0] = 255 - i
out = cv2.LUT(gray, lut)

Channel Operations

FunctionSignatureExample Files
splitcv2.split(src)16
mergecv2.merge(channels)13, 15, 16
meancv2.mean(src)16
minMaxLoccv2.minMaxLoc(src)09

Example

xxxxxxxxxx
# Split channels, display single channel
b, g, r = cv2.split(img_np)
img_out = image.Image(W, H, image.GRAYSCALE, alloc=image.ALLOC_REF, data=b)
Display.show_image(img_out)

# Channel statistics
avg = cv2.mean(img_np)  # Returns (B_mean, G_mean, R_mean)

Drawing

FunctionExample Files
line, rectangle, circle, ellipse08
putText, arrowedLine, drawMarker, fillPoly08

Example

xxxxxxxxxx
cv2.line(img_np, (50, 80), (250, 80), (0, 255, 0), 3)
cv2.rectangle(img_np, (50, 120), (200, 200), (0, 255, 255), 3)
cv2.circle(img_np, (400, 160), 50, (0, 255, 0), 3)
cv2.ellipse(img_np, (160, 320), (80, 40), 0, 0, 360, (0, 255, 0), 3)
cv2.putText(img_np, "OpenCV K230", (220, 400),
            cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2)
cv2.drawMarker(img_np, (400, 260), (0, 255, 0), cv2.MARKER_CROSS, 20, 3)
cv2.arrowedLine(img_np, (300, 80), (500, 80), (255, 0, 0), 3)

# fillPoly for triangle filling
tri = np.array([[80.0, 60.0], [160.0, 60.0], [120.0, 120.0]])
cv2.fillPoly(img_np, [tri], (255, 100, 100), cv2.LINE_AA)

File I/O (REPL exercises, no camera demo)

FunctionExample
imreadimg = cv2.imread("/sdcard/test.jpg")
imwritecv2.imwrite("/sdcard/out.png", img)

Display Method Quick Reference

# Color image (after modifying sensor native img, display)
img_np[:,:,:] = cv2.flip(img_np, 1)
Display.show_image(img)

# Grayscale image (cv2 output → image.Image wrapper)
edges = cv2.Canny(gray, 80, 200)
img_out = image.Image(W, H, image.GRAYSCALE, alloc=image.ALLOC_REF, data=edges)
Display.show_image(img_out)

# ⚠️ Color images cannot use image.Image(RGB888, ALLOC_REF) to wrap cv2 output!
OpenCV Introduction
Image Basic Transforms

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
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文