电子墨水屏音乐相册

背景

事情还要从一年前,我做的墨水屏早教机说起。https://www.zhangshengdong.com/post/baby_epaper/

虽然这个早教机宝宝的确很喜欢玩,是吸引注意力的一大利器。但架不住这个墨水屏刷新实在太慢,几乎要20秒,所以导致宝宝只有在图片刷出来时,才会看它一眼,这样就显得鸡肋了。

所以,最近我就在想,有什么是不关注刷新时间的呢?

嗯,就是早年间流行过的 音乐相册。

音乐相册

其实从早教机改成音乐相册并不复杂。

早教机讲究的是对应的图片和讲解音频同时出现、同时切换,而音乐相册则是照片的展示和音乐无关。

所以我直接开两个进程,让它们一个播放音乐,一个展示照片,各玩各的就行啦。但由于机身上只有一对按键,所以最后权衡再三,决定用这一对按钮来控制音乐的上下切换。

大体程序如下:

e5c1b98a2460385034f0a556cfc0f2d0.jpeg

自动转换照片

但只到这一步是不够的,因为由于我的墨水屏只有7色,所以这时候每张照片都得要我亲自打开photoshop,载入颜色表,把照片转换成7元色表示才能用。这样一来,照片多了工作量就大大不可接受了。

所以我需要在树莓派上能够自动完成任意照片的转换。

最简单的思路:最近距离法

第一个想到的方案自然就是最近距离法了,即判断每个像素点距离色表中每个颜色的远近,从而把该像素设置为离它原有颜色最近的那个元色。

代码:

e2af1dc3cdecccda299168afe56e263a.jpeg

但这个初始方案很快就被现实给打脸了。

原图:

1ad29f9774d37f4975aa313137f292ac.jpeg

最近距离法:

0601309b4f3275b8250e18def511812e.jpeg

可以发现,最近距离法转换出的就是色块,变成了剪影的效果,可以说毫无观感可言,几乎不能用了。

色彩均衡

粗略的分析了一下,感觉可能是因为这张照片的颜色大体偏黑,所以最近距离转换出来就变成以黑白橙为主了。

那如果原因是这样的话,我是不是可以对它做一下类似白平衡的色彩均衡操作,就可以把7元色都显示出来了呢?

代码:

f307507804d611f99d6e2b949de94439.jpeg

色彩均衡:

a3cbb0c6bdd7e1c0f78934ab5afeeeac.jpeg

可以发现,红色、蓝色、黄色的区域都变大了,还增加了一点点绿色,可以说的确是实现了刚才的目的:把7元色都显示出来。但这依旧没用啊,这个效果是绝对不能够使用的。

Floyd-Steinberg扩散抖动算法

所以我就在想,那原先手动用photoshop处理时,它是用的什么算法呢?

一通搜索,就发现了Floyd-Steinberg扩散抖动算法。

这个算法相当于是,将像素使用我们的方法一最近距离法进行标准化后,所产生的误差叠加到相邻像素上,从而利用误差扩散实现抖动,最终使得平均量化误差最小。

通俗一点说就是,它把误差分担到周边的像素上去,用周边这一团像素来模拟原图中的这一团区域。

代码:

18c759b3fd1222f991d884a9ba869687.jpeg

Floyd-Steinberg扩散抖动算法:

bfb870de6074ddfe0fa2d178536553e2.jpeg

哇,效果上完胜啊!惊艳!

缓存

那么最后,由于不管是哪种算法,都需要逐一像素点的处理,哪怕是在树莓派上使用了多线程、进程,也还要近7分钟之久。

所以就加入了缓存机制,在读取图片时,会先去查找有没有已经处理好的缓存文件,若没有才会真的进行转换处理。

最终实现照:

7e41d7eace0b7516f54c8d83d6b47cc5.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangsheng377

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值