电子墨水屏音乐相册

<h2>背景</h2><p>事情还要从一年前,我做的墨水屏早教机说起。https://www.zhangshengdong.com/post/baby_epaper/</p><p>虽然这个早教机宝宝的确很喜欢玩,是吸引注意力的一大利器。但架不住这个墨水屏刷新实在太慢,几乎要20秒,所以导致宝宝只有在图片刷出来时,才会看它一眼,这样就显得鸡肋了。</p><p>所以,最近我就在想,有什么是不关注刷新时间的呢?</p><p>嗯,就是早年间流行过的 音乐相册。</p><h2><i/>音乐相册</h2><p>其实从早教机改成音乐相册并不复杂。</p><p>早教机讲究的是对应的图片和讲解音频同时出现、同时切换,而音乐相册则是照片的展示和音乐无关。</p><p>所以我直接开两个进程,让它们一个播放音乐,一个展示照片,各玩各的就行啦。但由于机身上只有一对按键,所以最后权衡再三,决定用这一对按钮来控制音乐的上下切换。</p><p>大体程序如下:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-eeb59b2823cf86ef.jpeg" contenteditable="false" img-data="{"format":"jpeg","size":61279,"height":528,"width":674}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h2>自动转换照片</h2><p>但只到这一步是不够的,因为由于我的墨水屏只有7色,所以这时候每张照片都得要我亲自打开photoshop,载入颜色表,把照片转换成7元色表示才能用。这样一来,照片多了工作量就大大不可接受了。</p><p>所以我需要在树莓派上能够自动完成任意照片的转换。</p><h3><i/>最简单的思路:最近距离法</h3><p>第一个想到的方案自然就是最近距离法了,即判断每个像素点距离色表中每个颜色的远近,从而把该像素设置为离它原有颜色最近的那个元色。</p><p>代码:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-c32a78408912a0b8.jpeg" contenteditable="false" img-data="{"format":"jpeg","size":22935,"height":288,"width":757}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>但这个初始方案很快就被现实给打脸了。</p><p>原图:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-c88fb40ec4bdd7f2.jpeg" img-data="{"format":"jpeg","size":239224,"height":3880,"width":5184}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>最近距离法:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-c211ba888d1f6858.jpeg" img-data="{"format":"jpeg","size":34883,"height":400,"width":640}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>可以发现,最近距离法转换出的就是色块,变成了剪影的效果,可以说毫无观感可言,几乎不能用了。</p><h3><i/>色彩均衡</h3><p>粗略的分析了一下,感觉可能是因为这张照片的颜色大体偏黑,所以最近距离转换出来就变成以黑白橙为主了。</p><p>那如果原因是这样的话,我是不是可以对它做一下类似白平衡的色彩均衡操作,就可以把7元色都显示出来了呢?</p><p>代码:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-a275363edd34a0b9.jpeg" contenteditable="false" img-data="{"format":"jpeg","size":4375,"height":69,"width":276}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>色彩均衡:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-cc5c40eee28e1671.jpeg" img-data="{"format":"jpeg","size":35555,"height":400,"width":640}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>可以发现,红色、蓝色、黄色的区域都变大了,还增加了一点点绿色,可以说的确是实现了刚才的目的:把7元色都显示出来。但这依旧没用啊,这个效果是绝对不能够使用的。</p><h3><i/>Floyd-Steinberg扩散抖动算法</h3><p>所以我就在想,那原先手动用photoshop处理时,它是用的什么算法呢?</p><p>一通搜索,就发现了Floyd-Steinberg扩散抖动算法。</p><p>这个算法相当于是,将像素使用我们的方法一最近距离法进行标准化后,所产生的误差叠加到相邻像素上,从而利用误差扩散实现抖动,最终使得平均量化误差最小。</p><p>通俗一点说就是,它把误差分担到周边的像素上去,用周边这一团像素来模拟原图中的这一团区域。</p><p>代码:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-4dc755eeaf0e827e.jpeg" contenteditable="false" img-data="{"format":"jpeg","size":74141,"height":790,"width":757}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>Floyd-Steinberg扩散抖动算法:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-1806da9e81ebc6dc.jpeg" img-data="{"format":"jpeg","size":136929,"height":400,"width":640}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>哇,效果上完胜啊!惊艳!</p><h2><i/>缓存</h2><p>那么最后,由于不管是哪种算法,都需要逐一像素点的处理,哪怕是在树莓派上使用了多线程、进程,也还要近7分钟之久。</p><p>所以就加入了缓存机制,在读取图片时,会先去查找有没有已经处理好的缓存文件,若没有才会真的进行转换处理。</p><p>最终实现照:</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/6302584-d97e5e8bbfa56854.jpeg" img-data="{"format":"jpeg","size":221600,"height":2268,"width":4032}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,533评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,055评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,365评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,561评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,346评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,889评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,978评论 3 439
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,118评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,637评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,558评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,739评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,246评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,980评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,362评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,619评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,347评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,702评论 2 370

推荐阅读更多精彩内容