搜索
bottom↓
回复: 21

我也发个自己的bad apple

[复制链接]

出0入0汤圆

发表于 2012-5-25 13:10:12 | 显示全部楼层 |阅读模式
  以前很早就在论坛上看到有人做过播放bad apple的装置,加上我也关注过东方project,所以一直中毒不浅,最近忍不住做了一个,借此坛贵地献一下丑。
主控用的是stm32rbt6,屏幕是OCM12864,加上一个16M的古董SD卡。自己先从优酷上down了一个Bad apple的原画视频,用KMPplayer的捕获功能按每秒25帧截成3000多帧,之后用MATLAB写了代码把这些图批量处理成黑白二值图,按液晶显示的格式用二进制格式写入到.txt文件中,相当于丢了一个大数组进去。把这个TXT文件(3M左右)放到SD卡里,用winhex先搜到文件名在根目录里的位置,再根据根目录里面的偏移量算出文件在存储区的位置,找到那个位置后记下所占的第一个扇区的编号,记得一定是物理地址,这个会作为stm32读取数据的依据,关于SD卡文件系统我也是现学的,说多了恐怕会露怯。
http://www.tudou.com/programs/view/S7Sy9A40Z4k/
附MATLAB代码,
f=fopen('E:\ARM\STM32\截图\badapple.txt','wb')
for k=470:3666
s1=num2str(k)
switch length(s1)
case 3
      s2=strcat('0',s1)
case 4      
      s2=s1
end
s3=strcat('E:\ARM\STM32\截图\ba00',s2,'.bmp')
I=imread(s3)
t=graythresh(I)
I1=im2bw(I,t/4)
for i=1:1:8
  for j=1:1:128
       date=~I1(i*8,j)*128+~I1(i*8-1,j)*64+~I1(i*8-2,j)*32+~I1(i*8-3,j)*16+~I1(i*8-4,j)*8+~I1(i*8-5,j)*4+~I1(i*8-6,j)*2+~I1(i*8-7,j);

      fwrite(f,date,'uint8')
   end
end
end
fclose(f)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-5-25 13:13:35 | 显示全部楼层
  沙发

弄个fatfs文件系统 就不用winhex 看物理地址啦 ~~~~~~~~~  挺好弄的

出0入0汤圆

发表于 2012-5-25 13:17:33 | 显示全部楼层
黑白的看的吓死人,

出0入0汤圆

 楼主| 发表于 2012-5-25 13:21:14 | 显示全部楼层
xiaojian 发表于 2012-5-25 13:17
黑白的看的吓死人,

相机拍的,开灯屏幕反光就看不清了

出0入0汤圆

发表于 2012-5-25 13:34:09 | 显示全部楼层
效果不错

出0入0汤圆

发表于 2012-5-25 13:39:20 | 显示全部楼层
我之前用 51 做过、现在准备入门 STM32、、
LZ 的 LCD 比我用的 LCD 拖影少太多啊、、

出0入0汤圆

发表于 2012-5-25 14:03:38 | 显示全部楼层
我不是很明!用MATLAB代码,怎么调用啊??再此请教!!!

出0入0汤圆

发表于 2012-5-25 14:52:13 | 显示全部楼层
牛B。。。。。

出0入0汤圆

 楼主| 发表于 2012-5-25 18:21:52 | 显示全部楼层
shi_90 发表于 2012-5-25 14:03
我不是很明!用MATLAB代码,怎么调用啊??再此请教!!!

我这个程序只是在我自己的机子上跑的,没有什么普适性,但其中主要起作用的只有几行了,其它的主要是用作文件输出用的
试着写下注解

s3=strcat('E:\ARM\STM32\截图\ba00',s2,'.bmp') %      这一段读取了一帧保存在自己指定目录里的图片,我截图时取的名字都叫“ba00001.bmp"、“ba00123.bmp"之类的,
I=imread(s3)                                                  %   所以这里用'ba00‘和 s2 和'.bmp'三个字符串连接起来构成文件名,其中s2再循环中不断加一,遍历全部图片文件.

t=graythresh(I)                                           % 这一段获取图片全局灰度阈值,来作为之后二值化时的判决阈值,即每一像素相对灰度高于这个值就判为1,反之为0,
                                                                % 很多现有取模软件无法自由设置取模时的灰度阈值,所以取模结果会丢失很多细节,比如一些较浅的阴影和残影,这也是我决定自己写程序取模的原因

I1=im2bw(I,t/4)  % 这一段就是二值化喽,把RGB图像转成0,1图,t/4是我自己试出来的经验值,感觉看着比较舒服,另外其实完全可以把这个值定死,直接设成0.1左右,
                         %这样就可以省掉上一句(效果没啥区别)

for i=1:1:8
  for j=1:1:128
       date=~I1(i*8,j)*128+~I1(i*8-1,j)*64+~I1(i*8-2,j)*32+~I1(i*8-3,j)*16+~I1(i*8-4,j)*8+~I1(i*8-5,j)*4+~I1(i*8-6,j)*2+~I1(i*8-7,j);   % 这里把二值图矩阵的元素每8个组成一个十进制数
                                                                                                                                                                                                 %按什么原则玩过12864的朋友应该都很清楚了,
                                                                                                                                                                                                 %至于为什么每个位都要取反是因为灰度值越小
                                                                                                                                                                                                 %像素点越白,所以按上一句中取的二值图如果
                                                                                                                                                                                                 %直接显示在12864上会成为反色图,所以取反就好了
      fwrite(f,date,'uint8')      %写进文件,一次写8位

你问的大概是这个意思吧,我matlab玩得也不是特别溜,只能解释到这里了

出0入0汤圆

发表于 2012-5-25 18:58:25 | 显示全部楼层
这个好玩啊, 厉害的~~

出0入0汤圆

发表于 2012-5-25 19:59:22 | 显示全部楼层
本帖最后由 mobile01 于 2012-5-25 20:01 编辑

旧讨论区找到一个彩色的
http://v.youku.com/v_show/id_XNDAwNjg4NzI4.html

出0入0汤圆

 楼主| 发表于 2012-5-25 20:50:57 | 显示全部楼层
mobile01 发表于 2012-5-25 19:59
旧讨论区找到一个彩色的

这只初音看起来很赞,不知主控是用的什么片子

出0入0汤圆

发表于 2012-5-25 20:58:15 | 显示全部楼层
red_pig 发表于 2012-5-25 20:50
这只初音看起来很赞,不知主控是用的什么片子

以前看過的範例,使用安富莱开发板 stm32f103ze

基于uCOS+ucGUI的GIF 动画
http://blog.sina.com.cn/s/blog_98ee3a930100y708.html



出0入0汤圆

发表于 2012-5-25 21:40:05 | 显示全部楼层
red_pig 发表于 2012-5-25 18:21
我这个程序只是在我自己的机子上跑的,没有什么普适性,但其中主要起作用的只有几行了,其它的主要是用作 ...

谢谢!!

出0入0汤圆

 楼主| 发表于 2012-6-3 14:44:31 | 显示全部楼层
视频那种那些条纹,肉眼看是看不见的

出0入0汤圆

发表于 2012-9-6 20:23:39 | 显示全部楼层
mobile01 发表于 2012-5-25 20:58
以前看過的範例,使用安富莱开发板 stm32f103ze

基于uCOS+ucGUI的GIF 动画

用stm32f4做一个这样流畅的播放文件的,像小日本的那个就好了。赞楼主。

出0入0汤圆

发表于 2012-9-22 22:31:27 | 显示全部楼层
Lz的头像和这强大的技术能力不符啊!!

出0入0汤圆

发表于 2012-9-22 22:42:44 | 显示全部楼层
winhex怎么找到文件的地址啊?

出0入0汤圆

 楼主| 发表于 2012-9-22 22:55:02 | 显示全部楼层
本帖最后由 red_pig 于 2012-9-22 23:10 编辑
boostchopper 发表于 2012-9-22 22:31
Lz的头像和这强大的技术能力不符啊!!


哈,惭愧,完全过奖了。
--------------------------------------
不过我的头像到是很强哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-9-22 23:00:28 | 显示全部楼层
qiangnubing 发表于 2012-9-22 22:42
winhex怎么找到文件的地址啊?

嗯,大概先要在根目录里找到自己的文件名.TXT,可以直接看见的,然后之后会跟有文件内容的扇区地址,至于是第几个字节的内容我记不太清了,可以查查FAT的文件结构。建议你用以下这种方法找到二者间的对应关系, 在文件开头写一段类似123456这样的有规律组合,然后用winhex的搜索功能一下子就能找到了

出0入0汤圆

发表于 2012-9-22 23:04:14 | 显示全部楼层
red_pig 发表于 2012-9-22 23:00
嗯,大概先要在根目录里找到自己的文件名.TXT,可以直接看见的,然后之后会跟有文件内容的扇区地址,至于 ...

(⊙o⊙)哦  学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 19:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表