[Python + OpenCV]實現圖片轉換為視訊
阿新 • • 發佈:2021-02-03
[Python + OpenCV]實現圖片轉換為視訊
最近在做“動態手勢識別”,下載了一個公開資料集。這個資料集全部是‘.jpg’的圖片,需要把它轉換成視訊。
從網上找了一段程式碼:
https://www.cnblogs.com/Jinyublog/p/9118068.html
import os
import cv2
import numpy as np
path = './data/'
filelist = os.listdir(path)
fps = 24 # 視訊每秒24幀
size = (176, 100) # 需要轉為視訊的圖片的尺寸
# 可以使用cv2.resize()進行修改
video = cv2.VideoWriter("VideoTest1.avi", cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
# 視訊儲存在當前目錄下
for item in filelist:
if item.endswith('.jpg'):
# 找到路徑中所有後綴名為.png的檔案,可以更換為.jpg或其它
item = path + item
img = cv2.imread(item)
video. write(img)
video.release()
cv2.destroyAllWindows()
但是發現生成的視訊是亂序的(這個時候print os.listdir(path),輸出結果如下:)。
解決辦法:
https://blog.csdn.net/qq_44721124/article/details/108667317
對於這種純數字排序的圖片,可以進行sorted使其順序正確。
import os
img_sort = os.listdir('D:\Images\set12')
# get_key是sotred函式用來比較的元素,該處用lambda表示式替代函式。
get_key = lambda i : int(i.split('.')[0])
img_new_sort = sorted(img_sort, key=get_key)
print(img_sort, '\n', img_new_sort)
我們根據這兩位老哥的講解,得到:
import os
import cv2
path = './data/'
filelist = os.listdir(path)
filelist = sorted(filelist)
fps = 24 # 視訊每秒24幀
size = (176, 100) # 需要轉為視訊的圖片的尺寸
# 可以使用cv2.resize()進行修改
video = cv2.VideoWriter("VideoTest1.avi", cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)
# 視訊儲存在當前目錄下
for item in filelist:
if item.endswith('.jpg'):
# 找到路徑中所有後綴名為.png的檔案,可以更換為.jpg或其它
item = path + item
img = cv2.imread(item)
video.write(img)
video.release()
cv2.destroyAllWindows()
這個時候得到的視訊順序是正確的,時長也是正常的了。