希望通過cv2.VideoCapture類截取視頻幀圖片,期間只能截取視頻的每幀圖片,不能跳幀截取圖片,原來是在讀取視頻幀的時候沒有寫入ret, frame = cv2.VideoCapture.read()。
ret, frame = cv2.VideoCapture.read()函數輸出的是兩個參數,第一個參數ret 爲True 或者False,代表有沒有讀取到圖片;第二個參數frame表示截取到一幀的圖片。
修改前代碼(只能逐幀逐幀截取視頻幀圖片):
import cv2
import os
def save_img():
video_path = r'你的視頻絕對路徑'
videos = os.listdir(video_path)
for video_name in videos:
file_name = video_name.split('.')[0]
folder_name = file_name
os.makedirs(folder_name,exist_ok=True)
vc = cv2.VideoCapture(video_path+video_name) #讀入視頻文件
c = 1
if vc.isOpened(): # 判斷是否正常打開
rval, frame = vc.read()
else:
rval = False
timeF = 300 # 視頻幀計數間隔頻率
while rval: # 循環讀取視頻幀
pic_path = folder_name + '/'
if (c % timeF == 0): # 每隔timeF幀進行存儲操作
cv2.imwrite(pic_path + file_name + '_' + str(c) + '.jpg', frame)#存儲圖像
c = c + 1
cv2.waitKey(1)
vc.release()
save_img()
修改後代碼(能夠跳幀截取視頻幀):
import cv2
import os
def save_img():
video_path = r'D:\python3-PycharmProjects1\video2picture\20180911-12-48-31\data\123/'
videos = os.listdir(video_path)
for video_name in videos:
file_name = video_name.split('.')[0]
folder_name = file_name
os.makedirs(folder_name,exist_ok=True)
vc = cv2.VideoCapture(video_path+video_name) #讀入視頻文件
c = 1
if vc.isOpened(): # 判斷是否正常打開
rval, frame = vc.read()
else:
rval = False
timeF = 300 # 視頻幀計數間隔頻率
while rval: # 循環讀取視頻幀
rval, frame = vc.read()
pic_path = folder_name + '/'
if (c % timeF == 0): # 每隔timeF幀進行存儲操作
cv2.imwrite(pic_path + file_name + '_' + str(c) + '.jpg', frame) # 存儲爲圖像,保存名爲 文件夾名_數字(第幾個文件).jpg
c = c + 1
cv2.waitKey(1)
vc.release()
save_img()