pygame与cv2制作字符视频

Posted vivid boy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pygame与cv2制作字符视频相关的知识,希望对你有一定的参考价值。

Pygame 与cv2 制作字符视频

本人小白第一次发表博客文章

实现功能

目前学习模块有限,想着用pygame和cv2这两个比较常用的模块实现字符视频的操作,视频要获取每一帧的帧数,我省略了这一步,通过ps将视频剪成十帧,保存为png图片,这部应该可以通过python实现,目前限于能力有限。

  1. 视频剪成若干帧
  2. 对每一帧进行字符替换操作
  3. 通过pygame实现顺序播放

实现效果截图

需要导入的库

import cv2
import os
import pygame

视频剪成若干帧

博主通过ps实现,有点捞,opencv也可以做,结尾附图片

对每一帧进行字符替换操作

先附源码

all_path = "./images/"
list_path = os.listdir(all_path)
image_text = []
for path in list_path:
    image = cv2.imread(all_path + path, cv2.IMREAD_GRAYSCALE)
    img_list = []
    for row in image:
        img_str = ""
        for column in row:
            if 0 <= column < 20:
                img_str += "-"
            elif 20 <= column < 40:
                img_str += "+"
            elif 40 <= column < 60:
                img_str += "*"
            elif 60 <= column < 80:
                img_str += "@"
            elif 80 <= column < 100:
                img_str += "$"
            elif 100 <= column < 120:
                img_str += "&"
            elif 120 <= column < 140:
                img_str += "%"
            elif 160 <= column < 180:
                img_str += "#"
            elif 200 <= column < 220:
                img_str += "="
            elif 220 <= column < 240:
                img_str += "¥"
            else:
                img_str += "/"
        img_list.append(img_str)
    image_text.append(img_list)

代码原理很简单,通过os模块遍历存放图片的文件夹获取相对路径,利用image = cv2.imread(all_path + path, cv2.IMREAD_GRAYSCALE)将图像替换成灰度图像,遍历每张图片,通过循环嵌套,隔20单位,将像素替换成字符,每张图片相当于一个一维数组,按行存放,然后存放到image_text数组中

通过pygame实现顺序播放

先附源码

pygame.display.init()
screen = pygame.display.set_mode([1000, 680])
pygame.display.set_caption("文字视频-小黄人")
pygame.font.init()
clock = pygame.time.Clock()
obj_list = []
font = pygame.font.SysFont('kaiti', 3)
for row in image_text:
    obj_list_row = []
    for column in row:
        text = font.render(column, True, (0, 0, 0))
        obj_list_row.append(text)
    obj_list.append(obj_list_row)
index_image = 0


def get_image():
    global index_image
    index_image += 1
    if index_image < len(obj_list):
        return obj_list[index_image]
    else:
        index_image = 0
        return obj_list[index_image]


while True:
    clock.tick(10)
    screen.fill(pygame.Color(255, 255, 255))
    text_list = get_image()
    for index, value in enumerate(text_list):
        screen.blit(value, (0, index*3))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    pygame.display.update()

pygame基本操作不进行介绍,通过嵌套循环将字符转换成pygame字符对象,通过index_image索引循环,实现图片循环

链接:百度网盘 -> 戳
提取码:pupt

以上是关于pygame与cv2制作字符视频的主要内容,如果未能解决你的问题,请参考以下文章

python pygame制作简单的游戏移动操作

#yyds干货盘点#Python实战案例,CV2模块,Python实现抖音字符视频

如何在 cv2.VideoWriter 中使用 FPS 参数?

机器学习进阶-图像基本处理-视频的读取与处理 1.cv2.VideoCapture(视频的载入) 2.vc.isOpened(载入的视频是否可以打开) 3.vc.read(视频中一张图片的读取)

手把手教你使用 Python 制作贪吃蛇游戏

手把手教你使用 Python 制作贪吃蛇游戏