在 Raspberry Pi 上使用攝像頭的兩種方法

本文介紹了在 Raspberry Pi 上如何使用 OpenCV 搭配 libcamerapicamera2 操作攝像頭,並根據需求選擇適合的解決方案。

方法一:使用 libcamera 和 OpenCV

若您使用的是 Raspberry Pi Camera Module,libcamera 是一個高效能的接口,適合獲取影像並進行後續處理。

# 匯入必要模組
import cv2
import subprocess
import numpy as np

# 啟動 libcamera 並獲取影像
subprocess.run(["libcamera-vid", "-t", "0", "--inline"])

# 打開攝像頭
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("無法啟動攝像頭")
    exit()

# 連續讀取影像並顯示
while True:
    ret, frame = cap.read()
    if not ret:
        break

    cv2.imshow("Camera", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按下 'q' 鍵退出
        break

# 釋放資源
cap.release()
cv2.destroyAllWindows()

  

程式解析

  • 啟動 libcamera: 使用 subprocess.run 啟動 libcamera-vid,持續獲取影像。
  • 打開攝像頭: 使用 cv2.VideoCapture(0) 獲取攝像頭影像流。
  • 讀取並顯示影像: 透過 cap.read 持續讀取影像,使用 cv2.imshow 顯示畫面。
  • 鍵盤控制: 按下 'q' 鍵結束循環,釋放資源並關閉視窗。

方法二:使用 picamera2

picamera2 是 Raspberry Pi 官方推薦的攝像頭庫,簡單易用且效能良好。

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

# 初始化 picamera2
picam2 = Picamera2()
picam2.start()

# 持續讀取並顯示影像
while True:
    frame = picam2.capture_array()  # 直接獲取影像陣列
    cv2.imshow("Camera", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按下 'q' 鍵退出
        break

# 停止攝像頭並關閉視窗
cv2.destroyAllWindows()
picam2.stop()

  

程式解析

  • 初始化攝像頭: 使用 Picamera2() 建立攝像頭實例,並啟動 picam2.start()
  • 讀取影像: 使用 picam2.capture_array 獲取影像數據,並透過 cv2.imshow 顯示。
  • 鍵盤控制: 按下 'q' 鍵結束循環,停止攝像頭並釋放資源。

結論

根據需求選擇合適的攝像頭操作方法,libcamera 提供了高效能的影像捕捉能力,而 picamera2 則提供了簡潔易用的接口,兩者均可搭配 OpenCV 進行影像處理。請記得正確安裝驅動和依賴庫,確保程式順利運行。

文章標籤
全站熱搜
創作者介紹
創作者 liusming 的頭像
liusming

劉老師的跨域創想工坊

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