首頁 >後端開發 >Python教學 >Python程式設計:使用相機捕捉、播放和保存視頻

Python程式設計:使用相機捕捉、播放和保存視頻

WBOY
WBOY轉載
2023-04-24 12:43:111947瀏覽

如何用 Python 捕获、播放和保存摄像头视频

前幾天有個讀者在粉絲群裡面提了一個問題:

Python 怎麼提升影片清晰度和對比?

我之前沒有涉及到使用 Python 操作影片這一方面,所以當時很抱歉地跟讀者朋友說暫未涉及。

這兩天想了下,感覺應該補一下這一塊的內容,一方面是增加自己涉獵的廣度,另一方面也可以給粉絲答疑解惑。

今天先分享 Python 操作影片最基本的操作,包括讀取和播放影片和保存影片。

讀取視頻

要捕獲視頻,你需要建立一個 VideoCapture 物件。它的參數可以是設備索引或視訊檔案的名稱。所以,我們讀取影片有兩種方式,分別是從相機中讀取影片和從檔案中讀取影片。

從相機讀取影片

對於有攝影機的設備,例如有攝影機的筆記型電腦,我們可以直接調起電腦的鏡頭,讀取攝影機的視訊串流。

import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
break
# 显示结果帧
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows()

這裡我向 VideoCapture 物件傳入了參數 0,表示裝置索引,裝置索引就是指定哪個攝影機的數字。正常情況下,一個攝影機會被連接(就像我的情況一樣)。所以我簡單地傳0。你可以透過傳遞1來選擇第二台相機,以此類推。

cap.isOpened() 用來判斷是否要捕捉到影片。

cap.read() 傳回布林值(True/ False)。如果正確讀取了幀,它將為True。因此,你可以透過檢查此回傳值來檢查影片的結尾。

cv.imshow 方法用來顯示影片的幀。我們播放影片的原理就是逐幀播放。

在最後,不要忘記透過 cap.release() 釋放俘虜。

運行這段程式碼,你就可以看到一個彈跳窗即時播放你電腦攝影機中的影像了。

從檔案播放影片

與從相機捕捉相同,只是用影片檔案名稱更改攝影機索引。

另外,在顯示影片時,可以透過 cv.waitKey() 來控制影片播放的速度。如果設定太小,則影片將非常快,相當於倍速播放;而如果太大,則影片將變得很慢,相當於延遲播放。正常情況下25毫秒就可以了。

import cv2 as cv
cap = cv.VideoCapture('video.mp4')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
break
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()

運行這段程式碼,你就可以看到一個彈窗播放你選擇的影片檔案了。

保存視頻

從相機讀取視頻,我們可以將視頻保存到本地。我們捕捉一個視頻,一幀一幀地處理,如果我們想要保存這個視頻,非常簡單,只需使用 cv.VideoWriter()。

cv.VideoWriter() 有5個參數:

  • 參數1:輸出檔名,例如: output.mp4。
  • 參數2:FourCC 程式碼,FourCC 是用來指定視訊編解碼器的4位元組代碼。
  • 參數3:幀率的數量。
  • 參數4:幀大小。
  • 參數5:顏色標誌。如果為 True,正常顏色輸出,否則就是灰色影像輸出。

關於FourCC 與影片格式的對照關係,我列舉了一些常見的格式:

cv2.VideoWriter_fourcc('P','I','M','1 ') = MPEG-1 codec cv2.VideoWriter_fourcc('M','J','P','G') = motion-jpeg codec --> mp4v cv2.VideoWriter_fourcc('M', 'P', '4 ', '2') = MPEG-4.2 codec cv2.VideoWriter_fourcc('D', 'I', 'V', '3') = MPEG-4.3 codec cv2.VideoWriter_fourcc('D', 'I', 'V ', 'X') = MPEG-4 codec --> avi cv2.VideoWriter_fourcc('U', '2', '6', '3') = H263 codec cv2.VideoWriter_fourcc('I', '2', '6', '3') = H263I codec cv2.VideoWriter_fourcc('F', 'L', 'V', '1') = FLV1 codec

#儲存影片的代碼:

import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'MJPG')
out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640,480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame = cv.flip(frame, 1)
# 写翻转的框架
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()

運行這段程式碼,就可以在程式碼目錄下找到一個output.mp4 的影片檔了。

上面幾段程式碼中,如果想要退出影片動作,敲擊鍵盤的 q 就可以。

總結

以上就是今天要介紹的內容了,使用 python-opencv 來操作影片還是比較簡單的。當然,你也可以在讀取或儲存影片時對影片進行一些處理,這個我們後續再發文介紹。

以上是Python程式設計:使用相機捕捉、播放和保存視頻的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除