Python OpenCV 顯示camera攝影機串流影像

本篇介紹如何用 Python 搭配 OpenCV 模組的 cv2.VideoCapture 開啟攝影機並顯示攝影機串流的畫面。

使用範例

如果遇到 ImportError: No module named 'cv2' 這個錯誤訊息的話,請安裝 python 的 OpenCV 模組,參考這篇安裝吧!。

要擷取攝影機影像,需要先建立一個 VideoCapture,可以參考下列範例中的 cv2.VideoCapture(0)
cv2.VideoCapture 的參數代表攝影機裝置的代號(device index),如果有多台攝影機的話就可以從攝影機裝置的代號來指定,
但通常只有一台攝影機,所以這邊攝影機代號代號0,
之後使用 cap.isOpened() 來確認攝影機裝置有沒有開啟,之後在迴圈使用 cap.read() 每次從攝影機讀取一張影像,
來作進一步的影像處理,這邊的例子簡單地使用 cv2.cvtColor() 的將影像從彩色轉成灰階,最後使用 cv2.imshow() 將影像顯示出來,
並且在迴圈內使用 cv2.waitKey(1) 等待按鍵事件發生,如果按下 q 鍵的話則 break 離開這個迴圈。
最後別忘了要使用 release() 來釋放該攝影機裝置。

opencv-camera.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()

#cv2.namedWindow("live", cv2.WINDOW_AUTOSIZE); # 命名一個視窗,可不寫
while(True):
# 擷取影像
ret, frame = cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break

# 彩色轉灰階
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# 顯示圖片
cv2.imshow('live', frame)
#cv2.imshow('live', gray)

# 按下 q 鍵離開迴圈
if cv2.waitKey(1) == ord('q'):
break

# 釋放該攝影機裝置
cap.release()
cv2.destroyAllWindows()

下一篇教學是如何播放video影片檔案

其他參考
OpenCV: Getting Started with Videos
https://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html
OpenCV 擷取網路攝影機串流影像,處理並寫入影片檔案教學 - G. T. Wang
https://blog.gtwang.org/programming/opencv-webcam-video-capture-and-file-write-tutorial/

其它相關文章推薦
C++ OpenCV 顯示camera攝影機串流影像
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV 垂直vconcat 和水平hconcat 影像拼接
Python OpenCV resize 圖片縮放
Python 新手入門教學懶人包
小專案 Python OpenCV 圖片轉字元圖畫