使用opencv把視頻轉圖片以及圖片模糊問題

代碼如下:

# -*- coding: utf-8 -*-#
# Author:       weiz
# Date:         2019/11/26 10:22
# Name:         main
# Description:
import os
import cv2
import shutil


def video2images(video_p_n, img_p, dst_folder, index):
    video = cv2.VideoCapture()
    if not video.open(video_p_n):
        print("can not open the video")
        exit(1)
    count = 1
    while True:
        _, frame = video.read()
        if frame is None:
            break
        if count % dst_folder == 0:
            save_path = "{}_{:>05d}.png".format(dst_folder, index)
            save_path = img_p + '/' + save_path
            cv2.imwrite(save_path, frame, (cv2.IMWRITE_PNG_COMPRESSION, 0))
            index += 1
        count += 1
    video.release()
    # 打印出所提取幀的總數/以及原本視頻總幀數
    print("Totally save {:d}/{:d} pics".format((index-1), count))



if __name__ == '__main__':
    videoPath = "./video"       # 視頻存放的文件夾
    genImages = "./images"      # 最後圖片保存的位置
    EXTRACT_FREQUENCY = 10      # 幀提取頻率
    print("workSpace:{}".format(os.getcwd()))
    videoName = os.listdir(videoPath)
    if os.path.exists(genImages):
        shutil.rmtree(genImages)  # 刪除原來的圖片庫,以防混亂
        print("Old images deleted!")
    os.mkdir(genImages)
    for name in videoName:
        imglib = genImages + '/' + name[:-4]
        os.mkdir(imglib)
        video_p_n = videoPath + '/' + name
        video2images(video_p_n, imglib, EXTRACT_FREQUENCY, 1)

源視頻大小爲:633.4MB

視頻轉不同格式圖片的情況:

 

生成圖片的格式 生成圖片總大小 單幅圖片大小 生成時設置的參數
jpg 551.1MB 286.9KB 95(jpg默認的參數)
png 1.8GB 913.7KB 3(png默認的參數)
png 11.2GB 6.2MB 0(png圖片壓縮率最小)
bmp 11.2GB 6.2MB

說明:

  1. 只要是jpg格式的圖片就會壓縮,在opencv中圖片壓縮後的質量參數爲0到100,默認是95。
  2. png格式比jpg格式會好,屬於高質量的圖片保存格式。opencv中壓縮等級從0到9,默認是3,壓縮速度最快。
  3. bmp格式的圖片是無損圖片格式,但佔用的磁盤內存會比較大。沒有找到與bmp格式設置相關的說明及參數。
  4. 視頻轉成jpg格式的圖片,圖片的像素與源視頻中的像素會有所不同。如果用視頻和轉成圖片後分別用於訓練、識別等任務,可能會造成不一樣的結果。這點需要注意。
  5. 一般生成默認的png圖片就夠用,即:壓縮等級爲3。
  6. 生成圖片總大小也與視頻轉圖片時的提取率有關。上面的代碼提取率是每10張提取一張。

opencv官網說明

發佈了75 篇原創文章 · 獲贊 119 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章