【Python】视频转彩色字符动画

光谱图像常见评价指标 ​ SAM算法是由Kruse等[146]在1993年提出,把图像中的每个像元的光谱视为一个高维向量,通过计算两向量间的夹角来度量光谱间的相似性,夹角越小,两光谱越相似,属于同类地物的可能性越大,因而可根据光谱角的大小来辨别未知数据的类别。总的来说,ERGAS是一种用于评估遥感图像质量的定量指标,它考虑了图像的均方误差、均方根误差以及亮度信息,以提供对图像处理或压缩算法性能的综合评估。后的图像,二者的结构相似性可以看成是失真图像的图像质量衡量指标。在图像质量的衡量上更能符合人眼对图像质量的判断[ 阅读详情

序言

参考了博文:https://blog.youkuaiyun.com/qq_39687901/article/details/83347915的思路。参考pygame官方文档:https://www.pygame.org/docs/。和之前的图片转字符画不同,用颜色来区分,所以字符集没有特殊要求。


目标

如题,实现视频转彩色字符动画。


步骤

声明以及初始化
WIN_SIZE = (1280, 720)  # 720p
VIDEO_PATH = './video/test02.mp4'
VIDEO_WIDTH = 80
VIDEO_HEIGHT = 45
VIDEO_SIZE = (VIDEO_WIDTH, VIDEO_HEIGHT)
FONT_SIZE = 16
CHARS = 'ERROR'
CHARS_LEN = len(CHARS)

先声明一些需要用到的常量,WIN_SIZE和VIDEO_WIDTH、VIDEO_HEIGHT、FONT_SIZE是乘积的对应关系。

WIN_SIZE = (VIDEO_WIDTH * FONT_SIZE, VIDEO_HEIGHT * FONT_SIZE)

pygame.init()  # 初始化模块
win_sur = pygame.display.set_mode(WIN_SIZE)  # 创造图形窗口
视频转换成图片
def video2images(video_path, video_size):
    imgs = []
    video_cap = cv2.VideoCapture(video_path)  # 打开视频

    while video_cap.isOpened():
        ret, frame = video_cap.read()  # 按帧读取
        if ret:
            img = cv2.resize(frame, video_size, interpolation=cv2.INTER_AREA)  # 调整尺寸,像素重采样
            imgs.append(img)
        else:
            break

    video_cap.release()

    return imgs

这里用到cv2模块打开并按帧读取视频,之后将帧存放到数组中。

图片转换成彩色字符
def images2chars(imgs):
    sur_list = []
    font = pygame.font.SysFont('fangsong', FONT_SIZE)  # 从系统字库创建Font对象
    font.set_bold(True)  # 加粗

    for img in imgs:
        surface = pygame.Surface(WIN_SIZE)  # 创建图像对象
        index = 0
        x, y = 0, 0
        for row in range(VIDEO_HEIGHT):
            for col in range(VIDEO_WIDTH):
                rgb = img[row][col]
                rgb[0], rgb[2] = rgb[2], rgb[0]
                text_sur = font.render(CHARS[index], True, rgb)
                index = (index + 1) % CHARS_LEN
                surface.blit(text_sur, (x, y))
                x += FONT_SIZE
            x = 0
            y += FONT_SIZE
        sur_list.append(surface)

    return sur_list

对于每一帧逐行扫描,获取对应颜色的字符放到Surface对象中,最后添加到数组。

窗口渲染输出
current_frame = 0
while 1:
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            exit()

    pygame.time.delay(int(1000 / 24))  # 一秒24帧
    win_sur.fill((0, 0, 0))  # 黑色填充
    win_sur.blit(sur_list[current_frame], [0, 0])
    current_frame = (current_frame + 1) % sur_list_len
    pygame.display.flip()  # 展示图像

填充背景,渲染图像,读取下一帧。
这里的操作和官网的例子大同小异:

import sys, pygame
pygame.init()

size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()

    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

The last thing we need to do is actually update the visible display. Pygame manages the display with a double buffer. When we are finished drawing we call the pygame.display.flip()Update the full display Surface to the screen method. This makes everything we have drawn on the screen Surface become visible.


结果

在这里插入图片描述
在这里插入图片描述


源码

import pygame
import cv2


WIN_SIZE = (1280, 720)  # 720p
VIDEO_PATH = './video/test02.mp4'
VIDEO_WIDTH = 80
VIDEO_HEIGHT = 45
VIDEO_SIZE = (VIDEO_WIDTH, VIDEO_HEIGHT)
FONT_SIZE = 16
CHARS = 'ERROR'
CHARS_LEN = len(CHARS)


# 视频转图片
def video2images(video_path, video_size):
    imgs = []
    video_cap = cv2.VideoCapture(video_path)  # 打开视频

    while video_cap.isOpened():
        ret, frame = video_cap.read()  # 按帧读取
        if ret:
            img = cv2.resize(frame, video_size, interpolation=cv2.INTER_AREA)  # 调整尺寸,像素重采样
            imgs.append(img)
        else:
            break

    video_cap.release()

    return imgs


# 图片转字符
def images2chars(imgs):
    sur_list = []
    font = pygame.font.SysFont('fangsong', FONT_SIZE)  # 从系统字库创建Font对象
    font.set_bold(True)  # 加粗

    for img in imgs:
        surface = pygame.Surface(WIN_SIZE)  # 创建图像对象
        index = 0
        x, y = 0, 0
        for row in range(VIDEO_HEIGHT):
            for col in range(VIDEO_WIDTH):
                rgb = img[row][col]
                rgb[0], rgb[2] = rgb[2], rgb[0]
                text_sur = font.render(CHARS[index], True, rgb)
                index = (index + 1) % CHARS_LEN
                surface.blit(text_sur, (x, y))
                x += FONT_SIZE
            x = 0
            y += FONT_SIZE
        sur_list.append(surface)

    return sur_list


def main():
    pygame.init()  # 初始化模块
    win_sur = pygame.display.set_mode(WIN_SIZE)  # 创造图形窗口
    imgs = video2images(VIDEO_PATH, VIDEO_SIZE)  # 视频转图集
    sur_list = images2chars(imgs)  # 图集转字符图集
    sur_list_len = len(sur_list)

    current_frame = 0
    while 1:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.QUIT:
                exit()

        pygame.time.delay(int(1000 / 24))  # 一秒24帧
        win_sur.fill((0, 0, 0))  # 黑色填充
        win_sur.blit(sur_list[current_frame], [0, 0])
        current_frame = (current_frame + 1) % sur_list_len
        pygame.display.flip()  # 展示图像


if __name__ == '__main__':
    print('开始转换...')
    main()
遥感影像重建评价指标及其python代码实现 计算影像之间均方根误差RMSE、ERGAS、波谱角(光谱角)SAM、SRE(信号与重建误差比)的python实现 阅读详情

相关推荐

相对无量纲全局误差(ERGAS)

遥感图像融合中常用的评价指标,此处用于三通道遥感图像,多通道情况可以据此进行更改

Python可以这样学(第12季:音频处理与视频处理实战)

本课程讲解使用Python进行音频处理和视频处理,全程讲案例。预计20课,一边录制课程一边补充目录。课程录完之前暂定39元,全部上传之后再重新定价。

图像评价指标PSNR,SSIM,QNR,SAM,ERGAS

多种常见的图像评价指标峰值信噪比,结构相似性指数,光谱角等PSNR,SSIM,QNR,SAM,ERGAS

像素级图像融合方法研究——硕士论文阅读笔记

像素级图像融合方法研究 原文知网: 摘要

ZHANGWENJUAN1995的博客 2274

多光谱图像评价指标含psnr,rmse, ergas, sam, uiqi,ssim,DD,CCS

含psnr,rmse, ergas, sam, uiqi,ssim,DD,CCS,matlab版图片评估指标,适用与高光谱图像,多波段图像 Computes a number of quality indices from the remote sensing literature, namely the RMSE, ERGAS, SAM and UIQI indices. ground_truth - the original image (3D image),

基于加权最小二乘法的细节增强曝光融合:MATLAB代码实现了论文“基于加权最小二乘法的细节增强曝光融合”中描述的方法-matlab开发

以下步骤介绍了使用WLS进行图像融合的算法: (1)在我们的算法中,第一步是基于各向异性扩散(ANI)的两尺度分解,该分解用于在每次输入曝光时将较粗糙的细节(基础层)和较精细的细节(细节层)分开。 (2)弱纹理细节(即从ANI计算得出的细节层)和饱和度度量用于生成权重蒙版,以控制来自所有所有多次曝光中分离的基础层的像素的贡献。 (3)分别对第一步中计算的较粗细节和较细细节分别执行基于加权最小二乘(WLS)和基于Sigmoid函数的权重图细化。 (4)执行基于加权平均的较粗细节和较细细节的混合,以形成合成的无缝图像,而不会在大的不连续点附近模糊或丢失细节。

python视频转字符动画_python游戏开发之视频转彩色字符动画

本文实例为大家分享了python视频转彩色字符动画的具体代码,供大家参考,具体内容如下一、效果原图:转换后:效果可通过代码开头几行的参数调节二、代码开头几行代码,自己看着调整,把效果调到最佳就ok。依赖库:pip install opencv-pythonpip install pygame代码:import pygameimport cv2FONT_SIZE = 18 # 字体大小,可自行调整W...

weixin_39969953的博客 312

Python将视频转换为字符动画视频 保存为mp4格式视频

# Python将视频转换为字符动画视频 保存为mp4格式视频 1. 使用OpenCV逐帧读入视频,缩放并转换为灰度图; 2. 对每个像素点将灰度值转换为字符,得到每帧图像的字符串; 3. 创建黑色画布,将字符串插入画布得到字符形式的图像; 4. 将图像逐帧放入VideoWriter保存为mp4格式文件; 5. 使用 moviepy 添加音频。

python图片转彩色字符_python游戏开发之视频转彩色字符动画

本文实例为大家分享了python视频转彩色字符动画的具体代码,供大家参考,具体内容如下一、效果原图:转换后:效果可通过代码开头几行的参数调节二、代码开头几行代码,自己看着调整,把效果调到最佳就ok。依赖库:pip install opencv-pythonpip install pygame代码:import pygameimport cv2FONT_SIZE = 18 # 字体大小,可自行调整W...

weixin_39625709的博客 98

GD32F303定时器配置:实现两路互补PWM输出与相位控制

本文详细解析了基于GD32F303定时器实现两路互补PWM输出与精确相位控制的方法。通过配置TIMER2的中间对齐模式,结合REMAP功能解决引脚复用问题,从硬件层面稳定生成相位差180度的互补PWM信号,适用于电机驱动、开关电源等对时序要求苛刻的应用场景。

weixin_29182481的博客 303

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

weixin_37584728的博客 4576

python做字符动画_python游戏开发之视频转彩色字符动画

本文实例为大家分享了python视频转彩色字符动画的具体代码,供大家参考,具体内容如下一、效果原图:转换后:效果可通过代码开头几行的参数调节二、代码开头几行代码,自己看着调整,把效果调到最佳就ok。依赖库:pip install opencv-pythonpip install pygame代码:import pygameimport cv2FONT_SIZE = 18 # 字体大小,可自行调整W...

weixin_39823459的博客 185

雨流计数法的matlab实现,采用三点法与四点法

介绍雨流计数法是20世纪50年代由英国的两位工程师M.Matsuishi和T.Endo提出来的。该计数法的主要功能是把实测载荷历程简化为若干个载荷循环,供疲劳寿命估算和编制疲劳试验载荷谱使用。它以双参数法为基础,考虑了动强度(幅值)和静强度(均值)两个变量,符合疲劳载荷本身固有的特性。雨流计数法主要用于工程界,特别在疲劳寿命计算中运用非常广泛计数规则(1)雨流依次从载荷时间历程的峰值位置的内侧沿着...

u011391128的博客 3万+

python视频转换字符动画_python游戏开发之视频转彩色字符动画

本文实例为大家分享了python视频转彩色字符动画的具体代码,供大家参考,具体内容如下一、效果原图:转换后:效果可通过代码开头几行的参数调节二、代码开头几行代码,自己看着调整,把效果调到最佳就ok。依赖库:pip install opencv-pythonpip install pygame代码:import pygameimport cv2FONT_SIZE = 18 # 字体大小,可自行调整W...

weixin_39640646的博客 130

libjpeg-turbo图片解码 VS opencv

本文对比了libjpeg-turbo和opencv在图像解码层面的耗时情况,及解码数据是否存在diff

优快云_WHB的博客 832

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1738

python游戏开发实战:视频转彩色字符动画

一、效果 原图: 转换后: 效果可通过代码开头几行的参数调节 二、代码 开头几行代码,自己看着调整,把效果调到最佳就ok。 依赖库: pip install opencv-python pip install pygame import pygame import cv2 FONT_SIZE = 18 # 字体大小,可自行调整 WIN_SIZE = (1440, 1...

狡猾的皮球的博客 2269

OpenClaw部署太难?汉化版+中文社区+国产替代品,国内用户零门槛指南

OpenClaw作为GitHub 10万+星的开源AI助手平台,近期在国内AI圈备受关注 🌟 但部署难度和英文界面让很多用户望而却步。本文整理了针对国内用户的友好资源和简便替代方案,帮助国内用户零门槛上手AI助手工具 🚀

XiaoqiangClub的博客 5758

python编辑视频字符化_Python 视频转字符画 - 进阶

这篇文章是 视频转字符动画-Python-60行代码 的后续,如果感兴趣,请先看看它。0. 话说在前头最新版使用了画布方式实现,和本文相比改动非常大,如果对旧版本的实现没啥兴趣,可以直接移步 video2chars,它的效果动画见 极乐净土。新版本的核心代码不算注释70行不到,功能更强大。下面的效果动画是使用 html 实现的字符动画效果(上一篇的效果动画是 shell 版的):本文的优化仍然是针...

weixin_39890517的博客 448

ICV:Metal Fill Insertion流程

如果不想删除先前加的metal fill,可以使用signoff_create_metal_fill -mode add命令,当使用这个mode后,工具不会fix density问题,哪怕设置了signoff.create_metal_fill.fix_density_errors,设置这个mode后可以使用以下option控制metal fill 的插入。默认情况下,signoff_create_metal_fill是会删掉已经加进去的metal/via fill再重新加的。

m0_61544122的博客 1132

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5060

一行 Python 代码,给你的偶像画张“字符画”?

摘要:本文介绍了使用Python生成ASCII字符画的方法。首先展示了一行代码实现字符画生成的"魔法"(使用pywhatkit库),然后深入解析了字符画生成的四大原理:图像灰度化、缩放、亮度-字符映射和遍历替换。最后提供了DIY方案,使用Pillow库从零实现字符画生成器,并附有详细代码注释。文章从简单到深入,既满足快速体验需求,又为技术爱好者提供了可扩展的实现思路。

weixin_44871998的博客 1572

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何用Python打造惊艳的ASCII艺术:从图片到视频的完整转换指南

ASCII艺术是一种将图像转换为由字符组成的视觉艺术形式,通过巧妙排列不同密度的字符来模拟图像的明暗和细节。GitHub加速计划中的ASCII-generator项目提供了一套完整的Python工具,能轻松实现图片转文本、图片转图片以及视频转视频的ASCII艺术转换。本指南将带你探索这一创意工具的使用方法,让你快速掌握从普通媒体文件生成令人惊叹的ASCII艺术作品的技巧。 ## 认识ASCII-

gitblog_00494的博客 342

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

学会Python等于拥有整个世界 来看下智能视觉视频识别吧_python智慧视觉(1)

那就直接就源码开搞了吧。

2401_84586380的博客 985

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何用Python打造终极ASCII艺术生成器:从图片到视频的完整指南

ASCII艺术是一种将图像转换为由字符组成的视觉艺术形式,通过巧妙排列文字符号来呈现图像细节。GitHub加速计划中的ASCII-generator项目提供了一套完整的Python工具集,能够将图片和视频轻松转换为高质量的ASCII艺术作品。本文将带你探索这个强大工具的核心功能、使用方法和创意应用,让你快速掌握从静态图片到动态视频的ASCII艺术创作技巧。 ## 什么是ASCII艺术生成器?

gitblog_01071的博客 361

python视频转字符动画代码_Python 视频转字符动画 - 进阶

这篇文章是 视频转字符动画-Python-60行代码 的后续,如果感兴趣,请先看看它。0. 话说在前头最新版使用了画布方式实现,和本文相比改动非常大,如果对旧版本的实现没啥兴趣,可以直接移步 video2chars,它的效果动画见 极乐净土。新版本的核心代码不算注释70行不到,功能更强大。下面的效果动画是使用 html 实现的字符动画效果(上一篇的效果动画是 shell 版的): 本文的优化仍然是...

weixin_39617685的博客 292
上一篇: 【Python】爬取TapTap原神评论并生成词云分析
下一篇: 解决npx @electron-forge/cli import时提示缺失依赖
includei
博客等级 码龄9年 406粉丝 71原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值