在 Raspberry Pi 上使用攝像頭的兩種方法
本文介紹了在 Raspberry Pi 上如何使用 OpenCV 搭配 libcamera 或 picamera2 操作攝像頭,並根據需求選擇適合的解決方案。
方法一:使用 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 進行影像處理。請記得正確安裝驅動和依賴庫,確保程式順利運行。
文章標籤
全站熱搜
