Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/thu-cs-lab/MifConverter

Convert image / binary file to MIF format
https://github.com/thu-cs-lab/MifConverter

Last synced: 2 months ago
JSON representation

Convert image / binary file to MIF format

Awesome Lists containing this project

README

        

# MifConverter

本项目提供了两个工具,用于将图片或二进制文件转换为 MIF 格式。

## 依赖

本项目至少需要 Python 3.7 以上,在 Windows / Linux / macOS 均经过测试。

克隆本项目,并运行 `pip3 install -r requirements.txt` 下载依赖后,即可直接运行。

## pic2mif

将任何 OpenCV 支持的图片格式转换为 MIF 文件。运行 `python3 pic2mif.py --help` 可查看程序支持的所有选项,解释如下:

* `mode` 表示转换图片的模式(灰度或者 RGB 彩色);
* `channel_width` 表示图片每个颜色通道的位宽,默认为 3 (数设实验板 VGA 接口最大支持的位宽);
* `word_width` 表示 MIF 中每个字(即一个地址对应的数据)的宽度,它必须为一个像素位宽的整数倍(在灰度/彩色模式下分别为 1/3 倍的 `channel_width`);如果不指定或者设置为 -1,表示自动设置为一个像素的位宽;
* `threshold` 表示二值化时使用的像素阈值。该选项只在 `channel_width` 为 1 时起作用;如果后者大于 1,则总是截取最高的几位;
* `dump_radix` 为输出 MIF 文件的数据格式,可以为二进制或者十六进制。

一个额外的要求是,图片的像素数量能够整除每个字中像素的数量;也就是说,图片需要能够刚好装入整数个字中。

一些例子:

* `-m gray -c 4 -w 16 -r HEX`:将图片输出为灰度,每个像素位宽为 4,每个字中包含 4 个像素(位宽为 16),输出格式为十六进制
* `-m rgb -c 3 -w -1 -r HEX`:(默认设置)将图片输出为 RGB 三个通道,每个像素位宽为 9(3 * 3),每个字包含 1 个像素(位宽为 9),输出格式为十六进制

在 MIF 文件的每个字中,像素按顺序从低位向高位排列;一个像素中,通道顺序由低到高为 R、G、B;同一个通道中,低位在前,高位在后。举个例子,如果有 RGB 值为 `(1, 2, 3)` 和 `(4, 5, 6)` 的两个像素排列在同一个字中,并且通道宽度为 3,则对应转换后的数据为 `110_101_100_011_010_001`。

## bin2mif

将任何二进制文件转换为 MIF 文件。运行 `python3 bin2mif.py --help` 可查看程序支持的所有选项,含义与 `pic2mif` 中相同。

本程序要求 `word_width` 为 8 的倍数(即每个 word 中含有整数个字节)。如果文件长度不是 word 的整数倍,则会自动在最后填充零。