将原始字节转换为图像

时间:2018-12-20 07:50:56

标签: python image

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

这是我的新手,这就是为什么我遇到麻烦时曾尝试使用python脚本,但是在第17行给出了错误,数据为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)))

我想使用任何方法将文件转换为图像,老实说,我不在乎使用哪种方法,只要它能完成工作即可。

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

3 个答案:

答案 0 :(得分:1)

您可以在不编写任何Python的情况下将二进制数据转换为图像,只需在终端中使用 ImageMagick 。它包含在大多数Linux发行版中,并且可用于macOS和Windows。

如果您的图片为320x240,则应为:

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

由于您的图像是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:

enter image description here

直方图看起来确实有些明智:

enter image description here enter 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

答案 1 :(得分:0)

c4che/_cache.py

是一个硬编码的值,并且由于for i in range(0,76800): 没有那么多的值,因此您可以得到columnvector[0][i]

考虑为什么需要将范围设置为0-76800,或者为什么该值可以从某物的IndexError: list index out of range.动态获取。

答案 2 :(得分:0)

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

由于文件为320x240和8位二进制灰度,因此您只需要在其中包含该信息的标头并附加二进制文件即可:

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

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