本项目提供了两个工具,用于将图片或二进制文件转换为 COE 格式。
本项目至少需要 Python 3.7 以上,在 Windows / Linux / macOS 均经过测试。
克隆本项目,并运行 pip3 install -r requirements.txt
下载依赖后,即可直接运行。
将任何 OpenCV 支持的图片格式转换为 COE 文件。运行 python3 pic2coe.py --help
可查看程序支持的所有选项,解释如下:
mode
表示转换图片的模式(灰度或者 RGB 彩色);channel_width
表示图片每个颜色通道的位宽,默认为 8(数设实验板 HDMI 接口每个颜色通道支持的最大位宽);word_width
表示 COE 中每个字(即一个地址对应的数据)的宽度,它必须为一个像素位宽的整数倍(在灰度模式下为 1 倍的channel_width
,在彩色模式下为 3 倍的channel_width
);如果不指定或者设置为 -1,表示自动设置为一个像素的位宽;threshold
表示二值化时使用的像素阈值。该选项只在channel_width
为 1 时起作用;如果后者大于 1,则总是截取最高的几位;dump_radix
为输出 COE 文件的数据格式,可以为二进制或者十六进制。
一个额外的要求是,图片的像素数量能够整除每个字中像素的数量;也就是说,图片需要能够刚好装入整数个字中。
一些例子:
-m gray -c 4 -w 16 -r HEX
:将图片输出为灰度,每个像素位宽为 4,每个字中包含 4 个像素(位宽为 16),输出格式为十六进制-m rgb -c 8 -w -1 -r HEX
:(默认设置)将图片输出为 RGB 三个通道,每个像素位宽为 24(3 * 8),每个字包含 1 个像素(位宽为 24),输出格式为十六进制
在 COE 文件的每个字中,像素按顺序从低位向高位排列;一个像素中,通道顺序由低到高为 R、G、B。举个例子,如果有 RGB 值为 (1, 2, 3)
和 (4, 5, 6)
的两个像素排列在同一个字中,并且通道宽度为 3,则对应转换后的数据为 110_101_100_011_010_001
。
将任何二进制文件转换为 COE 文件。运行 python3 bin2coe.py --help
可查看程序支持的所有选项,含义与 pic2coe
中相同。
本程序要求 word_width
为 8 的倍数(即每个 word 中含有整数个字节)。如果文件长度不是 word 的整数倍,则会自动在最后填充零。