1. 程式人生 > 其它 >[Python + OpenCV]實現圖片轉換為視訊

[Python + OpenCV]實現圖片轉換為視訊

技術標籤:動態手勢識別pythonopencvcv

[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),輸出結果如下:)。
亂序print後

解決辦法:

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()

這個時候得到的視訊順序是正確的,時長也是正常的了。