把文件夹下的多个视频处理成图片

目标检测常用数据处理脚本,把videos文件夹下的多个视频处理成图片(每隔15帧取一帧图,保持长宽比缩放为640*480大小),命名成视频名+帧数.jpg的形式保存在images文件夹下,并输出图片名称到list.txt中。

import cv2
import numpy as np
from pathlib import Path


videos_path=Path(r"./videos")
output_dir=Path(r"./images")
fps=15
w, h = 640, 480


def keepWHR_Resize(image_matrix, output_width, output_height):
    '''
    Resize image keeping ratio and using white background.
    image_matrix:narray 'RGB'
    '''
    new_image = np.zeros((output_height, output_width, 3), dtype=image_matrix.dtype)
    if len(image_matrix.shape)<3:
        image_matrix=cv2.cvtColor(image_matrix,cv2.COLOR_GRAY2BGR)
    if image_matrix.shape[-1]==4:
        image_matrix = cv2.cvtColor(image_matrix,cv2.COLOR_RGBA2BGR)
    origin_height,origin_width  = image_matrix.shape[:2]
    ratio_w = output_width / origin_width
    ratio_h = output_height / origin_height
    if ratio_w < ratio_h:
        resize_width = output_width
        resize_height = round(ratio_w * origin_height)
    else:
        resize_width = round(ratio_h * origin_width)
        resize_height = output_height
    image_resize = cv2.resize(image_matrix,(resize_width,resize_height))
    new_image[0:resize_height,0:resize_width,:]=image_resize
    new_image=np.ascontiguousarray(new_image)
    return new_image


cnt=0
for v_p in videos_path.glob("./*"):
    print(v_p)
    vid_cap = cv2.VideoCapture(str(v_p))
    video_name = v_p.stem
    count=0
    predix=video_name+"_%d.jpg"
    with open(output_dir.joinpath("list.txt"),"a") as f:
        while (vid_cap.isOpened()):
            _, img = vid_cap.read()
            if _:
                if count%fps==0:
                    img =keepWHR_Resize(img, w, h)                   
                    cv2.imwrite(str(output_dir/(predix%cnt)),img)
                    f.write(predix%cnt+"\n")
                    cnt+=1
                count+=1
            else:
                break
    vid_cap.release()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给算法爸爸上香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值