close

使用 Picamera2 和 OpenCV 實現即時影像處理

本教學將示範如何在 Raspberry Pi 上使用 Picamera2 進行即時影像捕捉,並結合 OpenCV 對影像的特定區域(ROI)進行處理。這是一個適合初學者的簡單應用範例。

您需要準備的工具

  • 一台裝有 Picamera2 的 Raspberry Pi
  • Python 3 環境
  • 所需的函式庫:picamera2opencv-pythonnumpy

完整程式碼

以下是完整的 Python 程式碼,用於捕捉即時影像、處理特定區域並顯示結果:


from picamera2 import Picamera2
import cv2
import numpy as np

# 定義感興趣區域(ROI)的範圍
RECT = ((220, 20), (370, 190))  # 左上角和右下角座標
(left, top), (right, bottom) = RECT

# 函式:取出 ROI 區域
def roiarea(frame):
    return frame[top:bottom, left:right]
    
# 函式:將處理後的 ROI 貼回原影像
def replaceroi(frame, roi):
    frame[top:bottom, left:right] = roi
    return frame

# 初始化 Picamera2
picam2 = Picamera2()
# 設定相機解析度和影像格式
camera_config = picam2.create_preview_configuration(main={"size": (640, 480), "format": "RGB888"})
picam2.configure(camera_config)
picam2.start()

# 定義影像的寬和高
WIDTH = 400
HEIGHT = 300  # 調整以符合 4:3 的比例

while True:
    # 捕捉影像
    frame = picam2.capture_array()
    # 調整影像大小
    frame = cv2.resize(frame, (WIDTH, HEIGHT))
    # 水平翻轉影像(鏡像效果)
    frame = cv2.flip(frame, 1)

    # 提取 ROI
    roi = roiarea(frame)
    # 將 ROI 從 BGR 色彩空間轉換為 HSV 色彩空間
    roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

    # 將處理後的 ROI 貼回原影像
    frame = replaceroi(frame, roi)

    # 在原影像中用紅色矩形標出 ROI 範圍
    cv2.rectangle(frame, RECT[0], RECT[1], (0, 0, 255), 2)
    # 顯示影像
    cv2.imshow('frame', frame)

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

# 關閉視窗並停止相機
cv2.destroyAllWindows()
picam2.stop()

    

程式碼解釋

程式碼初始化 Picamera2,捕捉影像,並使用 OpenCV 對指定的感興趣區域(ROI)進行處理。ROI 被轉換為 HSV 色彩空間後,重新插入到原影像中,並用紅色框架標示其範圍。

安裝所需函式庫

在執行程式碼之前,請確保您已安裝必要的函式庫。執行以下命令以安裝 picamera2

sudo apt install python3-picamera2

結論

本範例展示了如何結合 Picamera2 和 OpenCV,在 Raspberry Pi 上進行即時影像處理。您可以修改此程式碼,嘗試不同的影像處理技術!

延伸閱讀

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

    劉老師的跨域創想工坊

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