转换为原始字节

2024-06-06 10:40:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含240x320图像的文件,但是它的字节格式我在十六进制编辑器中打开,得到了一个类似数组16列4800的原始数据。在

我对这一点完全陌生,这就是为什么我尝试使用python脚本时遇到了麻烦,但是在第17行data=columnvector[0][I]中出现了一个错误:

IndexError: list index out of range.

我尝试过一个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)))

我想用任何方法把文件转换成图像,我真的不在乎用什么方法,只要它能完成任务。在

这是一些文件 https://github.com/Mu-A/OV7670-files/tree/Help


Tags: 文件csv代码图像importdataas错误
3条回答
for i in range(0,76800):

是一个硬编码的值,由于columnvector[0][i]没有那么多值,因此得到IndexError: list index out of range.

考虑一下为什么需要将范围设置在0-76800之间,或者该值是否可以从某事物的len()中动态获得。在

不需要编写任何Python就可以将二进制数据转换成图像,只需在终端中使用ImageMagick。它包含在大多数Linux发行版中,可用于macOS和Windows。在

如果您的图像是320x240,它应该是:

  • 240*灰度(单通道),如果是长通道,则为320字节
  • 320*240*3,如果是3通道RGB。在

因为你的图像是76800,我假设它们是灰度级的。在

因此,在Terminal中,要将原始数据生成JPEG,请使用:

magick -depth 8 -size 320x240 gray:T1  result.jpg

或者,如果您使用的是ImageMagick的第6版,请使用:

^{pr2}$

如果要自动拉伸对比度的PNG,请使用:

magick -depth 8 -size 320x240 gray:T1 -auto-level result.png

不幸的是,你的照片中没有一幅是明智的。以下是T1,例如:

enter image description here

不过,柱状图看起来确实有些合理:

enter image description hereenter image description here


我认为你有一些根本性的错误,所以我会尝试回到第一原则来调试它。我会用手电筒照射,或者将相机对准窗口保存一张名为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

从二进制文件生成图像的另一种简单方法是将其转换为NetPBM图像。在

由于您的文件是320x240和8位二进制灰度,所以您只需在其中创建一个包含该信息的头文件并附加二进制文件:

printf "P5\n320 240\n255\n" >  image.pgm
cat T1                      >> image.pgm

现在您可以使用fehPhotoshopGIMP或许多其他图像查看器打开image.pgm。在

相关问题 更多 >