
項目摘要
通過視頻幀圖片提取,圖片批量裁剪,轉換為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
+關注
關注
244文章
24680瀏覽量
692062 -
單片機
+關注
關注
6078文章
45548瀏覽量
672720 -
點陣
+關注
關注
6文章
194瀏覽量
73450 -
stc32
+關注
關注
0文章
14瀏覽量
2656
發布評論請先 登錄
相關推薦
熱點推薦
HT for Web 幀動畫 | 3D 動態渲染設計與實現
幀動畫憑借靈活的序列幀設計與精準時序控制,成為圖撲軟件 HT 可視化項目的核心視覺能力。結合完善的動畫體系與性能優化方案,可打造高沉浸、高真實感的數字孿生場景,是
第7章 變量進階與點陣LED(7.3 7.4)
7.3點陣的初步認識 點陣LED顯示屏作為一種現代電子媒體,具有靈活的顯示面積(可任意分割和拼裝)、高亮度、長壽命、數字化、實時性等特點,應用非常廣泛。 通過學習
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
Montgomery模乘介紹
的整數,即 ; ,通常取 , 是r模n的逆,即 ; 。
計算 的算法:
因為 所以 , 都可以通過簡單的移位操作實現,從而消去了最復雜的除法運算。由于Montgomery 算法計算的
發表于 10-22 07:35
SGTools--動畫控件--屏幕實現動畫顯示 就是這么簡單
詳細步驟可以觀看視頻,
實現動畫很簡單,提前準備好gif文件和一個張背景圖
使用SGTools工具,就可以制作動畫界面啦
視頻中屏幕型號是
發表于 09-16 10:29
分享---儲能UI界面能量流動動畫實現方法
本文分享 工商業儲能設備的UI界面中如何實現 能量流動的動畫效果。
本例子效果 基于拓普微工業級 7寸屏電容串口屏(HMT070ETA-D型號)實現:
第1步:建立工程和頁面
使用SGTools新建
發表于 09-02 18:22
【EASY EAI Orin Nano開發板試用體驗】使用和LVGL的anim(簡易動畫)和animimg(圖像動畫)控件組合實現復雜的動畫功能
中也是建議使用者一個anim變量只執行一個動作(平移/縮放/旋轉),想要實現多個動畫并行播放(比如斜向平移,即同時改變X軸和Y軸坐標,或者在平移過程中旋轉obj)的話,官方是建議使用者定義多個anim
發表于 08-09 21:37
ElfBoard技術貼|如何在【RK3588】ELF 2開發板中實現自定義開機動畫
在嵌入式Linux系統的啟動過程中,默認的文本啟動日志往往缺乏良好的用戶體驗。為了提升設備啟動時的視覺效果,可以通過psplash工具實現圖形化開機動畫,支持靜態logo或動態動畫顯示
【EASY EAI Orin Nano開發板試用體驗】使用Linux posix文件讀取接口和LVGL的animimg(圖像動畫)控件實現動畫播放以及
手機系統界面那種動態的背景圖上面,通過將預先加載到RAM中的多個圖像緩存按照一定次序播放來實現,并且可通過api進行停止和重新開始播放,在
發表于 07-22 00:34
通過視頻幀提取及批量取模轉換實現基于STC32的點陣LED動畫播放
評論