close

使用 Picamera2 和 OpenCV 實現顏色檢測與物體追蹤

本教學展示如何使用 Picamera2 與 OpenCV 進行顏色檢測,並追蹤指定顏色的物體。

程式碼範例與註解

# 匯入必要模組
import cv2
import numpy as np
from picamera2 import Picamera2

# 定義顏色範圍 (HSV)
color = ((16, 59, 0), (47, 255, 255))  # 範例範圍
lower = np.array(color[0], dtype="uint8")
upper = np.array(color[1], dtype="uint8")

# 初始化 Picamera2
picam2 = Picamera2()
picam2.configure(picam2.create_preview_configuration(main={"format": "RGB888", "size": (640, 480)}))
picam2.start()

# 設定影像尺寸
WIDTH = 400
HEIGHT = int(WIDTH * (480 / 640))  # 維持比例

# 持續捕捉影像
while True:
    # 捕捉畫面並調整尺寸與方向
    frame = picam2.capture_array()
    frame = cv2.resize(frame, (WIDTH, HEIGHT))
    frame = cv2.flip(frame, 1)

    # 轉換為 HSV 並進行高斯模糊
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    hsv = cv2.GaussianBlur(hsv, (11, 11), 0)

    # 根據顏色範圍生成掩碼
    mask = cv2.inRange(hsv, lower, upper)
    mask = cv2.erode(mask, None, iterations=2)
    mask = cv2.dilate(mask, None, iterations=2)

    # 在掩碼中尋找輪廓
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    if contours:
        # 選擇最大輪廓
        cnt = max(contours, key=cv2.contourArea)
        if cv2.contourArea(cnt) < 100:
            continue  # 忽略小輪廓

        # 繪製邊框
        x, y, w, h = cv2.boundingRect(cnt)
        p1 = (x - 2, y - 2)
        p2 = (x + w + 4, y + h + 4)
        cv2.rectangle(frame, p1, p2, (0, 255, 255), 2)

        # 高亮顯示目標
        out = cv2.bitwise_and(hsv, hsv, mask=mask)
        cv2.rectangle(hsv, p1, p2, (0, 255, 255), 2)
        cv2.rectangle(out, p1, p2, (0, 255, 255), 2)

        # 合併結果
        frame = cv2.hconcat([frame, hsv, out])

    # 顯示畫面
    cv2.imshow("frame", frame)

    # 按下 'Esc' 鍵退出
    if cv2.waitKey(1) == 27:
        break

# 清理資源
cv2.destroyAllWindows()
picam2.stop()

  

程式解析

  • 定義 HSV 範圍: 使用 HSV 色彩空間指定要檢測的顏色範圍,以準確過濾目標物體。
  • 初始化相機: 使用 Picamera2 捕捉畫面,並設定尺寸為 640x480
  • 影像處理:
    • 將 RGB 畫面轉換為 HSV 色彩空間。
    • 應用高斯模糊平滑影像。
    • 生成二值化掩碼以過濾目標顏色。
  • 輪廓檢測與物體標記: 使用 cv2.findContours 檢測目標輪廓,並繪製矩形框標記最大輪廓。
  • 視覺化結果: 合併原始畫面、HSV 空間與目標物體的高亮掩碼,實現直觀顯示。
  • 退出條件: 按下 Esc 鍵結束程式,釋放資源。

結論

該程式利用 Picamera2 捕捉畫面,結合 OpenCV 的 HSV 篩選與輪廓檢測,實現指定顏色的物體追蹤。用戶可以通過調整 HSV 範圍適配不同場景與應用需求。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 liusming 的頭像
    liusming

    劉老師的跨域創想工坊

    liusming 發表在 痞客邦 留言(0) 人氣()