欢迎光临散文网 会员登陆 & 注册

树莓派入坑笔记(1.中)

2021-08-28 15:53 作者:会整活的剑人  | 我要投稿

0到3在上篇里面 "树莓派入坑笔记(1.上)"

4:Video to Binary convert

上篇已经大概说完硬件了,中篇说下如何把一个视频处理成用于OLED输出的二进制数据,有相关python基础阅读效果更佳.

我们要做的事情,本质是一大串图像处理的问题,用脚本批量操作是比较方便的,可以用matlab或者python.我用的python opencv.当然,网上有现成的图片转oled数据工具可以下载,不过那工具一次似乎只能转换一张图片,实在没有脚本来的方便,而且还可能有显示乱码的问题.

虽然树莓派上有自带的python 但是这些操作不建议在树莓派上完成,一个最直接的原因是比电脑要慢.

先看下128像素*64像素的OLED能输出的图像数据是怎么储存的

fig.3 oled的存储方式 (x,y)为像素

下面直接说代码

需要电脑上有numpy库和opencv-python库.不会的私信我(或者b站up主@佩尔方程)

先从视频构造VideoCapture对象(假设我们的bad apple视频和下面脚本放在同一目录下,且重命名为video.mp4),打开一个文件f作二进制输出.

查手册知captrue.read()返回值为二元组(ret,frame),如果视频没有处理完,ret为true,frame为当前这帧的图像对象.如果视频处理完了,ret为false,访问frame会出错.

那么ok,如果处理完了,跳出循环关闭文件,洗洗睡了.

假定视频没有处理完

先开一个数组arr 置零以存储这一帧的处理结果

先把原理那帧图像用resize函数改个大小扔到img里面去.

然后把img用cvtColor转灰度图扔到gray里面去.

所谓灰度图大致是这样一个东西,每个像素是[0,255]的整数,0表示全黑,255表示全白中间的数值表示不同深浅(亮度)的灰色,数越小颜色越深(越暗).

然后把gray用阈值threshold处理下(二值化)得到非黑即白的图像binimg

然后参考上面那张纸,把非黑即白的图像转换成二进制数组 存入arr

我们得到了output.bin 二进制文件(它就是那个OLED能播放的视频了)每1KB就是一个图像

把它通过filezilla给copy到树莓派上,然后就可以开始玩耍C语言和CMake(下篇 内容有些多 明天继续更新)



树莓派入坑笔记(1.中)的评论 (共 条)

分享到微博请遵守国家法律