python - 将原始字节转换为图像
问题描述
我有一个包含 240x320 图像的文件,但它的字节格式我在十六进制编辑器中打开它,得到了类似于 16 列 4800 原始数组的东西。
我对此完全陌生,这就是为什么我遇到麻烦我曾尝试使用 python 脚本,但它在第 17 行出现错误,在 data = columnvector[0][i] 中:
IndexError:列表索引超出范围。
我尝试了 java 代码,但这也是一个错误,我想尝试一些 c# 代码,但我找到的代码都没有解释如何将我的文件提供给代码。这是python代码
import csv
import sys
import binascii
csv.field_size_limit(500 * 1024 * 1024)
columnvector = []
with open('T1.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile,delimiter=' ', quotechar='|')
for row in csvreader:
columnvector.append(row)
headers =['42','4D','36','84','03','00','00','00','00','00','36','00','00','00','28','00','00','00',
'40','01','00','00','F0','00','00','00','01','00','18','00','00','00','00','00','00','84','03','00','C5','00',
'00','00','C5','00','00','00','00','00','00','00','00','00','00','00']
hexArray=[]
for i in range(0,76800):
data = columnvector[0][i]
hexArray.extend([data,data,data])
with open('T1.txt', 'wb') as f:
f.write(binascii.unhexlify(''.join(headers)))
f.write(binascii.unhexlify(''.join(hexArray)))
我想使用任何方法将文件转换为图像,老实说,我不在乎使用哪种方法,只要它能完成工作。
解决方案
您可以在不编写任何 Python 的情况下将二进制数据制作成图像,只需在终端中使用ImageMagick 。它包含在大多数 Linux 发行版中,可用于 macOS 和 Windows。
如果您的图像是 320x240,它应该是:
- 320 * 240 字节长,如果是单通道(灰度),或者
- 如果是 3 通道 RGB,则为 320 * 240 * 3。
由于您的图像是 76800,我假设它们是灰度的。
因此,在终端中,要将原始数据转换为 JPEG,请使用:
magick -depth 8 -size 320x240 gray:T1 result.jpg
或者,如果您使用的是ImageMagick版本 6 ,请使用:
convert -depth 8 -size 320x240 gray:T1 result.jpg
如果您想要具有自动对比度拉伸的 PNG,请使用:
magick -depth 8 -size 320x240 gray:T1 -auto-level result.png
不幸的是,您的图像都没有出现任何明智的结果。这里是 T1,例如:
直方图看起来确实有些合理:
我认为你有一些根本性的错误,所以我会尝试恢复到第一原则来调试它。我会将手电筒照射到窗户上,或者将相机对准窗户并保存一张名为的照片bright.dat
,然后用一张黑卡盖住镜头并拍摄另一张名为dark.dat
. 然后我会绘制数据的直方图,看看亮的是否在最右端,暗的是否在最左端。制作这样的直方图:
magick -depth 8 -size 320x240 Gray:bright.dat histogram:brightHist.png
和:
magick -depth 8 -size 320x240 Gray:dark.dat histogram:darkHist.png
推荐阅读
- python - 语法错误:在 repl.it 上打印 yaml.dump(
- r - R:替代和执行环境
- java - AppWidget 在消息发送或接收之前被冻结。如何在发送消息之前启动意图?
- bootstrap-carousel - Bootstrap Carousel Controls 响应但需要它们更精确
- java - 未找到 Hibernate 搜索类异常 Lucene Field$TermVector
- excel - Excel 保护行和列但允许单元格编辑
- xml - Android工作室,xml设计,布局设计
- python - 对存储在字典中的不同形状的 numpy 数组的所有元素求和
- javascript - 如何读取使用 NodeJS 上传的任何文件的 mimetype
- angular - 为什么我的 Angular 6 页面无法加载