Python 基於 cv2 幾行代碼 實現從視頻提取每一幀圖像

閒着沒事想要自己用Python給視頻添加一些特效,有時候就需要提取每一幀,或是提取一部分圖像進行操作。在這裏插入圖片描述

沒有cv2的話,命令行裝一個cv2

pip install cv2

什麼,沒裝python?

在這裏插入圖片描述

** 進入正題 **

先把要用的庫準備好

import cv2
import os.path as op
import os

提取圖像關os什麼事?

在這裏插入圖片描述

當然是要對路徑什麼的進行操作
  • 先打開(捕捉)一個視頻文件

video = cv2.VideoCapture(video_path)
  • 然後先讀取一張(success 爲成功與否,frame爲提取的圖像數據)

success, frame = video.read()
  • 然後開始循環(先存取上一次讀取的圖像,然後接着再讀一張)

img_id = 0
while success:
	img_outpath = f'...../..../../{img_id}.png'
	img_id += 1
	cv2.imwrite(img_outpath, frame)#img_outpath 是輸出路徑,自己定義
	success, frame = video.read()
  • 如果想隔幾張提取一張,那也好辦,if一下就搞定

在這裏插入圖片描述

img_id = 0
while success:
	img_outpath = f'...../..../../{img_id}.png'
	if not img_id%5: # 隔5張提取一張
		img_id += 1
		cv2.imwrite(img_outpath, frame)#img_outpath 是輸出路徑,自己定義
	success, frame = video.read()

稍微整理整理,就可以弄成一個小函數,使用起來調用一波就好

在這裏插入圖片描述

def split_video(video_path, out_path):
    if not op.exists(out_path):
        os.mkdir(out_path)
    vc = cv2.VideoCapture(video_path)
    success, frame = vc.read()
    i = 0
    while success:
        i += 1
        img_path = f'{out_path}\\{i}.jpg'
        cv2.imwrite(img_path, frame)
        if success:
            print(f'\r Split image{i}', end='')
            success, frame = vc.read()

提取了圖像,就可以進行一系列操作了,比如:

字符動畫在這裏插入圖片描述還有稍微剪輯後的

又比如AI換臉

在這裏插入圖片描述

無意冒犯,只是順手搜的素材,沒有惡意,只是作技術交流。

在這裏插入圖片描述

PIL Image.paste() 透明像素問題

圖片變字符畫,其實很簡單

乾貨!Windows頻幕二維碼識別小工具

python 圖片拼接、圖片轉pdf

今日頭條美圖爬取,有你想要的

python 精美壁紙、簡單爬蟲,告別壁紙荒

Python 圖片拼心,表白利器

Python 以字成圖,花式表白,脫單趁早

奇妙的“字符26進制”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章