天天看點

3、python 視訊轉圖檔及圖檔轉視訊、裁剪、建立圖檔壓縮成視訊

背景:從視訊中擷取圖檔,進行資料标注,然後進行訓練;

指定檔案夾讀取視訊然後産生相應圖檔工具

# -*- coding: utf-8 -*-
import os
import cv2
import os.path
import glob
source_path = r'G:\1'
destion_path = r'G:\1'


files = sorted(glob.glob(os.path.join(source_path, "*.avi")))
c=0
for path_video in files:
    vc = cv2.VideoCapture(path_video)
    (filepath, tempfilename) = os.path.split(path_video)
    (filename, extension) = os.path.splitext(tempfilename)

    dir_filename=os.path.join(filepath,filename)
    if not os.path.exists(dir_filename):
        os.mkdir(dir_filename)
    rval = vc.isOpened()
    while rval:
        c = c + 1
        rval, frame = vc.read()
        if rval and c%10==0:
            cv2.imwrite(os.path.join(dir_filename ,".".join([filename +str(c/10) , 'jpg'])), frame)
        elif rval:
            pass
        else:
            break
    vc.release()      

圖檔進行180°翻轉;

from PIL import Image
import os
import os.path
 
rootdir = r'picture'
for parent, dirnames, filenames in os.walk(rootdir):
    for filename in filenames:
        print('parent is :' + parent)
        print('filename is :' + filename)
        currentPath = os.path.join(parent, filename)
        print('the fulll name of the file is :' + currentPath)
 
        im = Image.open(currentPath)
        out = im.transpose(Image.ROTATE_180)
        newname=filename
        out.save(rootdir+'/'+newname)      
from PIL import Image
import os
fin = 'picture'
fout = 'picture'
for file in os.listdir(fin):
    file_fullname = fin + '/' +file
    (filepath, tempfilename) = os.path.split(file_fullname)
    (filename, extension) = os.path.splitext(tempfilename)
    if extension=='.jpg':
       img = Image.open(file_fullname)
       a = [179, 296,  1119, 704]
       box = (a)
       roi = img.crop(box)
       out_path = fout + '/' + file
       roi.save(out_path)      
# coding=utf-8
import os
import cv2
import glob
img_root = 'C:\\Users\\PHILIPS\\Desktop\\img\\img\\math\\glass\\cover'
fps = 22


fourcc = cv2.VideoWriter_fourcc(*'MJPG')
videoWriter = cv2.VideoWriter('C:\\Users\\PHILIPS\\Desktop\\img\\img\\math\\glass\\saveVideo.avi',fourcc,fps,(1920,1080))#最後一個是儲存圖檔的尺寸

alist=[]
for root, ds, fs in os.walk(img_root):
    for item in fs:
        alist.append(item)

dict={}
for i in range(0,len(alist)):
    for j in range(0,len(alist)):
        str=alist[j].split('_')
        num=eval(str[-1].split('.')[0])
        dict[num]= alist[j]

for i in sorted (dict) :
    print(os.path.join(img_root,dict[i]))
    frame = cv2.imread(os.path.join(img_root,dict[i]))
    videoWriter.write(frame)

videoWriter.release()      
from PIL import Image
import cv2
fps = 25
size=(1920, 1080)

img = Image.new("RGBA",size,(0,255,0))#RGBA的真色模式
img = img.convert("RGB")#jpg格式必須轉換,單色和灰色不用
img.save("create.jpg")

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
videoWriter = cv2.VideoWriter('saveVideo.avi', fourcc, fps,size)  # 最後一個是儲存圖檔的尺寸

img=cv2.imread("create.jpg")
while True:
    videoWriter.write(img)
    print("create video")
videoWriter.release()