关于我想批量p图这件事

需求:将视频中的某一片段,加上另外一张图片,且每张图片在视频中的位置是固定的,不要求变化。

1.视频分帧

'''
利用opencv将视频按帧分割,并以png得格式存储,不改变分辨率
'''
import cv2
import os

path = 'video'
video_list = os.listdir(path)
for video in video_list:
    video_path = os.path.join(os.getcwd(),path,video)
    vc=cv2.VideoCapture(video_path)
    if vc.isOpened():
        rval,frame=vc.read()
    else:
        rval=False

    c =1
    while rval:
        rval,frame=vc.read()
        if rval==False:
        	break
        cv2.imwrite('D:/630/0706/'+str(c)+'.png',frame)
        print(c)
        c=c+1
        cv2.waitKey(1)
    vc.release()

2。copy

import os

from PIL import Image
dirpath=r"D:/630/0706"#大图文件夹
goatpath=r"D:/630/21"
if not os.path.exists(goatpath):
    os.mkdir(goatpath)
# Opening the primary image (used in background)

img1 = Image.open("zi.png")#小图路径
img1 = img1.convert("RGBA")

i = 1
for curDir,dirs,files in os.walk(dirpath):
    for file in files:
        img2 = Image.open(curDir+"\\"+file)
        img2 = img2.convert("RGBA")
        # img2.paste(img1, (325,160), mask=img1)
        img2.paste(img1, (519,284), mask=img1)   # 子图在母图上的坐标
        img2.save(goatpath+"\\"+str(i)+".png")
        print(goatpath + "\\" + str(i) + ".png" + " has done")
        i=i+1

3.合成视频

import os
import cv2

# 要被合成的多张图片所在文件夹
# 路径分隔符最好使用“/”,而不是“\”,“\”本身有转义的意思;或者“\\”也可以。
# 因为是文件夹,所以最后还要有一个“/”
file_dir = 'D:/630/21/'
list = []
for root ,dirs, files in os.walk(file_dir):
    for file in files:
        list.append(file)      # 获取目录下文件名列表

# VideoWriter是cv2库提供的视频保存方法,将合成的视频保存到该路径中
# 'MJPG'意思是支持jpg格式图片
# fps = 5代表视频的帧频为5,如果图片不多,帧频最好设置的小一点
# (1280,720)是生成的视频像素1280*720,一般要与所使用的图片像素大小一致,否则生成的视频无法播放
# 定义保存视频目录名称和压缩格式,像素为1280*720
video = cv2.VideoWriter('D:/630/0706.mp4',cv2.VideoWriter_fourcc(*'XVID'),30,(1920,1080))

for i in range(1,len(list)):
    #读取图片
    img = cv2.imread('D:/630/21/'+list[i-1])
   	# resize方法是cv2库提供的更改像素大小的方法
    # # 将图片转换为1280*720像素大小
    # img = cv2.resize(img,(1280,720))
    # 写入视频
    video.write(img)

# 释放资源
video.release()

4.重命名

'''批量更改文件名,方便数据集处理,并且也避免了图片顺序会被打乱得问题'''

import os

# import re
# import sys

path = r'D:/630/21'
filelist = os.listdir(path)
filetype = '.png'

# for file in filelist:
# print(file)

for file in filelist:
    Olddir = os.path.join(path, file)
    # print(Olddir)

    if os.path.isdir(Olddir):
        continue

    # os.path.splitext("path"):分离文件名与扩展名
    filename = os.path.splitext(file)[0]
    filetype = os.path.splitext(file)[1]

    # zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0
    Newdir = os.path.join(path, filename.zfill(6) + filetype)
    os.rename(Olddir, Newdir)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值