0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过视频帧提取及批量取模转换实现基于STC32的点阵LED动画播放

jf_07365693 来源:jf_07365693 作者:jf_07365693 2024-06-27 02:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

image.png

项目摘要

通过视频帧图片提取,图片批量裁剪,转换为BMP文件并取模,获得显示屏代码,基于STC32单片机,在8x8点阵LED模块上实现动画播放。

项目内容

动态图片显示

  1. 将目标动图或视频提取为帧图片,可通过 MATLAB 程序实现;
  2. 将帧图片裁剪为目标显示屏的像素比例,如 0.96 英寸 OLED 显示屏的像素为 128x64, 则需将帧图片按照 2:1 的宽高比进行裁剪、对于单个 8x8 点阵则需按照 1:1 进行裁剪,注意选择目标裁剪区域;
  3. **将裁剪过的帧图片转化为灰度图像(以便后面进行二值化),之后进行像素缩小操作,将图片调整至目标显示屏的像素分辨率,最后进行二值化处理,并将处理结果存储为 ***.bmp 格式文件;
  4. **将批量保存的 BMP 文件按照帧顺序重命名为 **1,2,3... ,之后使用[批量取模工具]生成相应的 16 进制代码,复制到程序中即可。

详见: [哔哩哔哩 bilibili] .

**或者将帧图片像素缩小至目标显示屏像素,保持彩色状态,存储为 BMP 格式,使用批量取模工具,勾选 **转换彩图,调整阈值至适当值(如66%),即可直接生成对应代码。

详见附录。该项目的STC代码见附件

附录

图片取模

  1. **提取视频或 GIF 动图的帧为图片,可使用 **MATLAB[GIF Movie Gear] 软件
  2. **使用 **Image2Lcd 软件批量处理目标帧图片,并生成 BMP 格式图片,以便后面读取二值化数据;

**这里推荐使用 **[广州灵派科技] 的 **=OledTools=** 软件对图片进行处理,可调整灰度阈值,对于像素点较少的情况,转换效果最佳;缺点是不能进行批量处理。

**对于 128x64 像素的转换,各软件均可。批量转换推荐 **[PictureReader] 软件,可批量生成 BMP 文件。

  1. **将BMP图片转化为数模,可使用 **CopyLeft By Horse2000 (字模提取)或 [PCtoLCD2018]软件.

一些有趣的资源: [Wokwi OLED Animation Maker for Arduino]动态图标显示在 128x64 显示屏利用 Arduino 代码。

视频帧提取

clear;
video_file='test.mp4';
video=VideoReader(video_file);
frame_number=video.NumFrames;
for i = 1:5:frame_number
    image_name=strcat('test',num2str((i-1)/5+1)); % 每5帧取一张图
    image_name=strcat(image_name,'.jpg');
    I=read(video,i);  %读出图片
    imwrite(I,image_name,'jpg'); %写入图片
    I=[];
end

MATLAB重命名文件的排序问题

**可使用 **sort_nat 函数解决,注意需要下载安装该函数。

file_path = '';
Tpath = 'Number'; % target path
img_path_list = dir([file_path '*.bmp']);%图片路径
img_num = length(img_path_list);
sort_nat_name=sort_nat({img_path_list.name});
for k = 1:img_num
    image_name = sort_nat_name{k};%获取图片名称
    image = imread(strcat(file_path,image_name));%读取图片
    imwrite(image,strcat(Tpath,int2str(k),'.bmp'),'bmp'); 
end

图像裁剪

clear;clc;
file_path = ''; % 设定你存放图片的目录
img_path_list = dir(strcat(file_path, '*.jpg')); % 选后缀为 .jpg 的图片
img_num = length(img_path_list); %获得图片数量
for n = 1:img_num 
    image_name = img_path_list(n).name;
    image = imread(strcat(file_path, image_name));
    crop_image = imcrop(image, [323 0, 1080, 1080]); 
    imwrite(crop_image, strcat('Cut/Cut', image_name)); % 保存文件
end

图片像素调整

clear;clc;
numrows = 8; 
numcols = 8;
file_path = ''; % 设定你存放图片的目录 - 当前文件夹
img_path_list = dir(strcat(file_path, '*.jpg')); % 选后缀为 .jpg 的图片
img_num = length(img_path_list); %获得图片数量
for n = 1:img_num 
    image_name = img_path_list(n).name;
    image_n = image_name(1:end-4); % 删除文件后缀
    image = imread(strcat(file_path, image_name));
    RtG_image = rgb2gray(image); % rgb to gray
    RS_image = imresize(RtG_image,[numrows numcols]); 
    BNR_image = imbinarize(RS_image);
    imwrite(BNR_image,strcat('Resize8x8RS',image_n,'.bmp'),'bmp'); 
end

相关资料见附件。*附件:STC_Flash_MAX7219.zip

转载请注明来源,谢谢!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    244

    文章

    24731

    浏览量

    692621
  • 单片机
    +关注

    关注

    6078

    文章

    45589

    浏览量

    673934
  • 点阵
    +关注

    关注

    6

    文章

    194

    浏览量

    73485
  • stc32
    +关注

    关注

    0

    文章

    14

    浏览量

    2676
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LED芯片点阵LED驱动点阵数码管显示芯片 VK1616

    数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁存器、LED 驱动等电路。SEG脚接LED阳极,GRID脚接LED阴极,可
    发表于 04-29 09:07

    中微爱芯五种千颗级LED灯阵方案介绍

    中小尺寸、中高密度的LED点阵,既能实现文字、图案、动画与律动效果,又能兼顾成本、功耗与安装灵活,成为各类场景轻量化视觉呈现的优选方案。
    的头像 发表于 04-07 14:12 2432次阅读
    中微爱芯五种千颗级<b class='flag-5'>LED</b>灯阵方案介绍

    HT for Web 动画 | 3D 动态渲染设计与实现

    动画凭借灵活的序列设计与精准时序控制,成为图扑软件 HT 可视化项目的核心视觉能力。结合完善的动画体系与性能优化方案,可打造高沉浸、高真实感的数字孪生场景,是
    的头像 发表于 03-24 11:05 207次阅读
    HT for Web <b class='flag-5'>帧</b><b class='flag-5'>动画</b> | 3D 动态渲染设计与<b class='flag-5'>实现</b>

    第7章 变量进阶与点阵LED(7.5 7.6)

    7.5 点阵动画显示 点阵动画显示,说到底就是对多张图片分别进行,使用程序算法巧妙的切换
    的头像 发表于 12-17 16:51 3823次阅读
    第7章 变量进阶与<b class='flag-5'>点阵</b><b class='flag-5'>LED</b>(7.5 7.6)

    第7章 变量进阶与点阵LED(7.3 7.4)

    7.3点阵的初步认识 点阵LED显示屏作为一种现代电子媒体,具有灵活的显示面积(可任意分割和拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛。 通过学习
    的头像 发表于 12-11 14:56 1182次阅读
    第7章 变量进阶与<b class='flag-5'>点阵</b><b class='flag-5'>LED</b>(7.3 7.4)

    FZH367 具有独立自动呼吸功能的LED(12×16)点阵驱动芯片 原厂技术支持

    概述 型号:FZH367FZH367是一种具有独立自动呼吸功能的LED(12×16)点阵驱动芯片。芯片通过I2C协议控制每个LED实现 3
    发表于 11-18 09:18

    原厂 FZH365 具有独立自动呼吸功能的LED(12×12)点阵驱动芯片

    是一种具有独立自动呼吸功能的LED(12×12)点阵驱动芯片。芯片通过I2C协议控制每个 LED实现 3 种自动呼吸模式及PMW模式的切换
    发表于 11-17 09:38

    智能显示模块可以播放动画吗?动画功能怎么实现,在哪可以添加?

    智能显示模块可以播放动画吗?动画功能怎么实现,在哪可以添加?
    发表于 11-08 08:57

    Montgomery乘介绍

    的整数,即 ; ,通常 , 是rn的逆,即 ; 。 计算 的算法: 因为 所以 , 都可以通过简单的移位操作实现,从而消去了最复杂的除法运算。由于Montgomery 算法计算的
    发表于 10-22 07:35

    SGTools--动画控件--屏幕实现动画显示 就是这么简单

    详细步骤可以观看视频实现动画很简单,提前准备好gif文件和一个张背景图 使用SGTools工具,就可以制作动画界面啦 视频中屏幕型号是
    发表于 09-16 10:29

    分享---储能UI界面能量流动动画实现方法

    本文分享 工商业储能设备的UI界面中如何实现 能量流动的动画效果。 本例子效果 基于拓普微工业级 7寸屏电容串口屏(HMT070ETA-D型号)实现: 第1步:建立工程和页面 使用SGTools新建
    发表于 09-02 18:22

    基于开源鸿蒙的视频播放开发样例

    在开源鸿蒙生态建设中,多媒体能力是构建丰富用户体验的核心要素。本开发样例针对视频播放场景,聚焦开源鸿蒙原生媒体框架,通过Video组件实现视频
    的头像 发表于 08-19 10:41 1872次阅读
    基于开源鸿蒙的<b class='flag-5'>视频</b><b class='flag-5'>播放</b>开发样例

    【EASY EAI Orin Nano开发板试用体验】使用和LVGL的anim(简易动画)和animimg(图像动画)控件组合实现复杂的动画功能

    中也是建议使用者一个anim变量只执行一个动作(平移/缩放/旋转),想要实现多个动画并行播放(比如斜向平移,即同时改变X轴和Y轴坐标,或者在平移过程中旋转obj)的话,官方是建议使用者定义多个anim
    发表于 08-09 21:37

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板中实现自定义开机动画

    在嵌入式Linux系统的启动过程中,默认的文本启动日志往往缺乏良好的用户体验。为了提升设备启动时的视觉效果,可以通过psplash工具实现图形化开机动画,支持静态logo或动态动画显示
    的头像 发表于 07-25 09:37 1686次阅读
    ElfBoard技术贴|如何在【RK3588】ELF 2开发板中<b class='flag-5'>实现</b>自定义开机<b class='flag-5'>动画</b>

    【EASY EAI Orin Nano开发板试用体验】使用Linux posix文件读取接口和LVGL的animimg(图像动画)控件实现动画播放以及

    手机系统界面那种动态的背景图上面,通过将预先加载到RAM中的多个图像缓存按照一定次序播放实现,并且可通过api进行停止和重新开始播放,在
    发表于 07-22 00:34