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
    +关注

    关注

    242

    文章

    23235

    浏览量

    660482
  • 单片机
    +关注

    关注

    6034

    文章

    44548

    浏览量

    634421
  • 点阵
    +关注

    关注

    6

    文章

    194

    浏览量

    72493
  • stc32
    +关注

    关注

    0

    文章

    14

    浏览量

    2105
收藏 人收藏

    评论

    相关推荐

    基于51单片机的LED点阵滚动显示系统

    花样;(4)可以利用“点阵LED字模生成工具”生成自己想要显示的字符。仿真演示视频:基于51单片机的LED点阵滚动显示系统-仿真
    的头像 发表于 10-22 14:12 200次阅读
    基于51单片机的<b class='flag-5'>LED</b><b class='flag-5'>点阵</b>滚动显示系统

    图片动画控件和Video image控件的使用方法

    在UI开发过程中,序列基本是绕不开的,AWTK 支持多种方法实现序列显示,本文介绍图片动画控件和Video image控件的使用方法。
    的头像 发表于 08-06 16:44 842次阅读
    图片<b class='flag-5'>动画</b>控件和Video image控件的使用方法

    请问ESP32-S3能不能实现播放视频

    1. 请问下 ESP32-S3 有播放mp4视频的案例 可供参考吗? 2. 使用 esp_jpeg 组件可以解码jpg文件,但是音频又怎么同步播放?而且解码+刷屏 非常耗时,320x240屏 帧率
    发表于 07-23 06:53

    【AWTK使用经验】如何实现序列动画

    目前想在AWTK中显示炫酷流畅的图片动画,此时可以用video_image控件来播放序列动画。本篇文章将介绍该控件的原理和使用方法。图1ZTP800示教器运行v
    的头像 发表于 07-18 08:25 398次阅读
    【AWTK使用经验】如何<b class='flag-5'>实现</b>序列<b class='flag-5'>帧</b><b class='flag-5'>动画</b>

    STC32STC8H驱动DS18B20测温串口发送数据

    STC32G12K128 和 STC8H8K64U 驱动 DS18B20 模块,采集环境温度并通过串口发送数据至电脑
    的头像 发表于 06-27 16:27 815次阅读
    <b class='flag-5'>STC32</b>和<b class='flag-5'>STC</b>8H驱动DS18B20测温串口发送数据

    鸿蒙ArkTS声明式组件:ImageAnimator

    提供动画组件来实现播放图片的能力,可以配置需要播放的图片列表,每张图片可以配置时长。
    的头像 发表于 06-24 11:18 517次阅读
    鸿蒙ArkTS声明式组件:ImageAnimator

    OpenHarmony实战开发-如何实现动画

    请求动画 请求动画通过requestAnimationFrame函数逐回调,在调用该函数
    发表于 05-06 14:11

    OpenHarmony实战开发-如何实现组件动画

    ArkUI为组件提供了通用的属性动画和转场动画能力的同时,还为一些组件提供了默认的动画效果。例如,List的滑动动效,Button的点击动效,是组件自带的默认动画效果。在组件默认
    的头像 发表于 04-28 15:49 610次阅读
    OpenHarmony实战开发-如何<b class='flag-5'>实现</b>组件<b class='flag-5'>动画</b>。

    HarmonyOS开发案例:【视频播放器】

    使用ArkTS语言实现视频播放器,主要包括主页面和视频播放页面
    的头像 发表于 04-24 14:52 859次阅读
    HarmonyOS开发案例:【<b class='flag-5'>视频</b><b class='flag-5'>播放</b>器】

    HarmonyOS开发案例:【视频播放器】

    使用ArkTS语言实现视频播放器,主要包括主界面和视频播放界面,
    的头像 发表于 04-23 17:25 678次阅读
    HarmonyOS开发案例:【<b class='flag-5'>视频</b><b class='flag-5'>播放</b>器】

    HarmonyOS开发案例:【视频播放器】

    基于video、swiper和slider组件,实现简单的视频播放器,可支持海报轮播、视频播放等功能。
    的头像 发表于 04-22 21:06 458次阅读
    HarmonyOS开发案例:【<b class='flag-5'>视频</b><b class='flag-5'>播放</b>器】

    TouchGFX如何实现视频播放

    TouchGFX 如何实现视频播放
    发表于 04-12 08:14

    定制高清视频转换器:实现无缝视频格式转换的创新解决方案

    的个性化需求,定制高清视频转换器成为了一个创新且实用的解决方案。 一、无缝视频格式转换的需求 在多媒体时代,用户经常需要将高清视频从一种格式
    的头像 发表于 02-22 14:28 312次阅读

    鸿蒙开发-视频播放器方案

    ArkUI提供能力。 本开发指导将介绍如何使用AVPlayer开发视频播放功能,以完整地播放一个视频作为示例,实现端到端
    发表于 02-19 17:20

    什么时候需要进行多到单模的转换?如何实现光纤到单模光纤的转换

    什么时候需要进行多到单模的转换?如何实现光纤到单模光纤的转换? 多光纤和单模光纤是两种常
    的头像 发表于 12-27 11:13 1489次阅读