DigiHouse
English

TECH ARTICLE · NCU · 4 MIN READ

Blog / NCU

第 13 課|Raspberry Pi 使用攝影機完整指南

Raspberry Pi 使用攝影機完整指南。本文已重新整理為適合 DigiHouse 閱讀的課程文章,並保留原始 PIXNET 刊載網址。

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

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

方法一:使用 libcamera 和 OpenCV

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

text
# 匯入必要模組
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 官方推薦的攝像頭庫,簡單易用且效能良好。

text
# 匯入必要模組
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 進行影像處理。請記得正確安裝驅動和依賴庫,確保程式順利運行。

劉老師的跨域創想工坊

本文亦刊載於 PIXNET

https://liusming.pixnet.net/blog/posts/14222876433