利用opencv把视频转换成字符串视频

本次项目操作过程是先把视频切成一张张图片,再 把图片处理成字符串图片,再将其拼接成视频。
处理前后图片对比:
在这里插入图片描述
水原千鹤天下第一

第一步,安装好所需的库

本次项目所需的第三方库主要有两个,opencv库和pillow库

pip install 库名

但是导入时需要注意,

import cv2 #导入opencv库
from PIL import ... #导入pillow库

第二步 实现功能

  1. 把视频切割成一张张图片
import cv2

vid = cv2.VideoCapture('图片路径\1.mp4')
print(vid)
# vid是一个VideoCapture对象,可以用read()方法读取
print(vid.read())
# 读取结果为
'''
(True, array([[[250, 250, 250],
        [250, 250, 250],
        [250, 250, 250],
        ..., 
        [226, 225, 212],
        [226, 225, 212],
        [226, 225, 212]]], dtype=uint8))
'''
中间那个二维矩阵即为视频中每一张图片的的rgb编码,
所以,只需取出二维矩阵,即可把 每张图片切割开。
success = True
count = 0
while success:
    success, image = vid.read()  # success为上边读取出来的元组中的第一个元素True,image为视频矩阵
    cv2.imwrite("img/%d.jpg" % count,image)  # 引号内为存储路径和文件名,这里用了相对路径
    count+=1
  1. 将每张图片转化成字符串
import cv2
from PIL import Image,ImageDraw,ImageFont
import os

def draw(pic):
    img = cv2.imread('img/'+pic)
    # print(img)
    img = img[:, :, (2, 1, 0)] # 因为 矩阵中的RGB和opencv中的正好相反,所以用该操作转换矩阵顺序
    # 创建一个画布
    blank = Image.new("RGB", [len(img[0]), len(img)], color="white")
    draeobj = ImageDraw.Draw(blank)
    n = 10
    font = ImageFont.truetype('C:\Windows\Fonts\simfang.ttf',size=n-1)# 这里需要一个自己电脑内的字体文件

    for i in range(0,len(img),n):
        for j in range(0,len(img[i]),n):
            text = '水原千鹤天下第一 '  # 这里随便定义一个字符串,当然可以自己随机生成
            draeobj.ink = img[i][j][0] + img[i][j][1]*256 + img[i][j][2]*256*256
            draeobj.text([j,i],text[int(j/n)%len(text)],font=font)
    blank.save('new_img/'+pic,'jpeg')  # 字符串图片存储路径 


filelist = os.listdir('img') # 正常图片读取路径 
for file in filelist:
    draw(file)

注:这步操作很耗费时间

  1. 拼接视频
import os
import cv2

def resort(list):
    new_list = []
    for i in list:
        new_list.append(int(i.split('.')[0]))
    new_list = sorted(new_list) # 该操作是要给图片排序,有时可能不需要排序
    return new_list

def picvideo(path,size):
    filelist = os.listdir(path)
    filelist = resort(filelist)

    filepath = 'new_video/op.avi' # 视频输出路径,需带上文件名和文件后缀
    fourcc   = cv2.VideoWriter_fourcc('I','4','2','0') # 这是opencv中的foucc编码格式
    fps = 24
    video = cv2.VideoWriter(filepath,fourcc,fps,size)
    for item in filelist:
        item = os.path.join(path,str(item)+'.jpg')
        img  = cv2.imread(item)
        video.write(img)
    video.release()
picvideo('new_img',(1920,1080)) # 第一个参数为字符串图片路径,第二个是分辨率

更多的编码格式:https://blog.csdn.net/u013943420/article/details/78779197

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值