(? ?_?)?[Python3 OpenCV4]3.視頻操作
文章目錄
接口文檔
打開攝像頭
播放本地視頻
錄制視頻
接口文檔
VideoCapture Object
VideoWriter Object
cv2.cvtColor()
打開攝像頭
使用攝像頭,需要使用cv2.VideoCapture(0)創建VideoCapture對象,參數0指的是攝像頭的編號,如果你電腦上有兩個攝像頭的話,訪問第2個攝像頭就可以傳入1,依此類推。
import cv2 # capture = cv2.VideoCapture(0) if None == capture: print("攝像頭打開失敗") while(True): # 獲取一幀 ret, frame = capture.read() if ret == False: continue # 將這幀轉換為灰度圖 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame', gray) if cv2.waitKey(1) == ord('q'): break
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
VideoCaptureProperties
cv2.CAP_PROP_POS_MSEC
視頻文件的當前位置(毫秒)。
cv2.CAP_PROP_POS_FRAMES
下一步要解碼/捕獲的幀的基于0的索引。
cv.2CAP_PROP_POS_AVI_RATIO
視頻文件的相對位置:0=膠片開始,1=膠片結束。
import cv2 #打開 0號攝像頭 capture = cv2.VideoCapture(0) # 獲取捕獲的分辨率 # propId可以直接寫數字,也可以用OpenCV的符號表示 width, height = capture.get(3), capture.get(4) print(width, height) # 以原分辨率的一倍來捕獲 capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2) capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2) # 某些攝像頭設定分辨率等參數時會無效,因為它有固定的分辨率大小支持,一般可在攝像頭的資料頁# 中找到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
播放本地視頻
播放視頻其實跟打開攝像頭的操作一樣
我們也可以獲取視頻分辨率、幀率、當前播放幀等等信息,可以查看
VideoCapture Object
結構就可以看到信息了~~~~~~~~~~
eg:
import cv2 # 播放本地視頻 capture = cv2.VideoCapture('wzry.mp4') #打印一些視頻的信息 print(capture.get(cv2.CAP_PROP_POS_MSEC)) width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) print("分辨率:%f,%f"%(width,height)) print("休息一會") while(capture.isOpened()): ret, frame = capture.read() if False == ret: print("視頻播放完畢~~~") break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame', gray) if cv2.waitKey(30) == ord('q'): print("手動退出了~~~~") break
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
錄制視頻
關于視頻四字節碼,可以去這個網站查看
http://www.fourcc.org/codecs.php
如下功能是讀取一個視頻,轉存成另一個視頻
import cv2 # 定義編碼方式并創建VideoWriter對象 # 指定視頻編碼方式的四字節碼 ''' 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 ''' #視頻讀取 capture = cv2.VideoCapture('wzry.mp4') #獲取FPS video_fps = capture.get(cv2.CAP_PROP_FPS) #獲取寬度、高度 video_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) video_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) video_size =(int(video_width),int(video_height)) #獲取視頻編碼方式的四字節碼 codec = capture.get(cv2.CAP_PROP_FOURCC) #strcodec = chr(codec&0xFF) + chr((codec>>8)&0xFF) + chr((codec>>16)&0xFF) + chr((codec>>24)&0xFF) #print ('codec is ' + strcodec) outfile = cv2.VideoWriter('output.mp4', int(codec), video_fps, video_size) while(capture.isOpened()): ret, frame = capture.read() if ret: outfile.write(frame) # 寫入文件 cv2.imshow('frame', frame) if cv2.waitKey(1) == ord('q'): break else: break
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
32
33
34
35
36
37
38
39
40
OpenCV Python 視頻
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。