项目摘要
通过视频帧图片提取,图片批量裁剪,转换为BMP文件并取模,获得显示屏代码,基于STC32单片机,在8x8点阵LED模块上实现动画播放。
项目内容
动态图片显示
- 将目标动图或视频提取为帧图片,可通过 MATLAB 程序实现;
- 将帧图片裁剪为目标显示屏的像素比例,如 0.96 英寸 OLED 显示屏的像素为 128x64, 则需将帧图片按照 2:1 的宽高比进行裁剪、对于单个 8x8 点阵则需按照 1:1 进行裁剪,注意选择目标裁剪区域;
- **将裁剪过的帧图片转化为灰度图像(以便后面进行二值化),之后进行像素缩小操作,将图片调整至目标显示屏的像素分辨率,最后进行二值化处理,并将处理结果存储为 **
*.bmp
格式文件; - **将批量保存的 BMP 文件按照帧顺序重命名为 **
1,2,3...
,之后使用[批量取模工具]生成相应的 16 进制代码,复制到程序中即可。
详见: [哔哩哔哩 bilibili] .
**或者将帧图片像素缩小至目标显示屏像素,保持彩色状态,存储为 BMP 格式,使用批量取模工具,勾选 **转换彩图
,调整阈值至适当值(如66%),即可直接生成对应代码。
详见附录。该项目的STC代码见附件。
附录
图片取模
- **提取视频或 GIF 动图的帧为图片,可使用 **MATLAB 或 [GIF Movie Gear] 软件
- **使用 **Image2Lcd 软件批量处理目标帧图片,并生成 BMP 格式图片,以便后面读取二值化数据;
**这里推荐使用 **[广州灵派科技] 的 **=OledTools=** 软件对图片进行处理,可调整灰度阈值,对于像素点较少的情况,转换效果最佳;缺点是不能进行批量处理。
**对于 128x64 像素的转换,各软件均可。批量转换推荐 **[PictureReader] 软件,可批量生成 BMP 文件。
- **将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
+关注
关注
242文章
23235浏览量
660482 -
单片机
+关注
关注
6034文章
44548浏览量
634421 -
点阵
+关注
关注
6文章
194浏览量
72493 -
stc32
+关注
关注
0文章
14浏览量
2105
发布评论请先 登录
相关推荐
评论