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

简介: 通过视频帧图片提取,图片批量裁剪,转换为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 动图的帧为图片,可使用 MATLABGIF Movie Gear 软件

  2. 使用 Image2Lcd 软件批量处理目标帧图片,并生成 BMP 格式图片,以便后面读取二值化数据;

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

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

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

详见:CSDN博客 . 吾爱破解 www.52pojie.cn .

一些有趣的资源: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

详见:知乎 (zhihu.com) .

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

详见:CSDN博客 . File Exchange - MATLAB .

图像裁剪

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('Resize8x8\RS',image_n,'.bmp'),'bmp'); 
end

转载请注明来源,谢谢!
如有任何问题请于本贴留言或联系作者,邮箱 lijinlei0907@163.com

相关文章
|
1月前
|
存储 Linux API
解析音频输出调节音量的原理以及调节的方法
解析音频输出调节音量的原理以及调节的方法
42 0
基于STM32下OLED显示实现文字取模软件配置
在做OLED显示实验时,文字很难编辑出对应的点,从网上找到了这个文字转换软件,以下是软件的配置项,由于是STM32所以自定义格式选择C51格式, 取模方式:列行式 取模走向:逆向 输出数制:16进制 输出选项:输出精简格,输出紧凑格式 点阵格式:阴码
368 0
基于STM32下OLED显示实现文字取模软件配置
|
前端开发 芯片
【杂七杂八】excel中根据RTL信号位宽生成拼接取位
【杂七杂八】excel中根据RTL信号位宽生成拼接取位
119 0
【杂七杂八】excel中根据RTL信号位宽生成拼接取位
STM32:TIM输入捕获模式测频率并在OLED上显示频率(内含:1.接线图/实物图+2.代码部分+3.输入捕获模式使用到的STM32库函数)
STM32:TIM输入捕获模式测频率并在OLED上显示频率(内含:1.接线图/实物图+2.代码部分+3.输入捕获模式使用到的STM32库函数)
356 0
STM32:TIM输入捕获模式测频率并在OLED上显示频率(内含:1.接线图/实物图+2.代码部分+3.输入捕获模式使用到的STM32库函数)
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
185 0
FPGA-像素操作(二值图片,异或操作,暗通道rgb)
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
145 0
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
|
数据采集 编解码 数据处理
案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出excel、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
|
数据采集 编解码 开发者
案例分享:Qt多通道数据采集系统(通道配置、电压转换、采样频率、通道补偿值、定时采集、导出excel和图表、自动XY轴、隐藏XY轴、实时隐藏显示通道
案例分享:Qt多通道数据采集系统(通道配置、电压转换、采样频率、通道补偿值、定时采集、导出excel和图表、自动XY轴、隐藏XY轴、实时隐藏显示通道
案例分享:Qt多通道数据采集系统(通道配置、电压转换、采样频率、通道补偿值、定时采集、导出excel和图表、自动XY轴、隐藏XY轴、实时隐藏显示通道
通过定时器T1查询方式控制LED1周期性闪烁(模模式)
通过定时器T1查询方式控制LED1周期性闪烁(模模式) 宏定义与函数声明 初始化 主函数
270 0