close
使用 Picamera2 和 OpenCV 實現即時影像處理
本教學將示範如何在 Raspberry Pi 上使用 Picamera2 進行即時影像捕捉,並結合 OpenCV 對影像的特定區域(ROI)進行處理。這是一個適合初學者的簡單應用範例。
您需要準備的工具
- 一台裝有 Picamera2 的 Raspberry Pi
- Python 3 環境
- 所需的函式庫:
picamera2
、opencv-python
和numpy
完整程式碼
以下是完整的 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 上進行即時影像處理。您可以修改此程式碼,嘗試不同的影像處理技術!
延伸閱讀
全站熱搜