【发布时间】:2019-04-13 04:45:39
【问题描述】:
我正在尝试使用 Python 将黑白图像的每个像素转换为十六进制并将其存储在“.txt”文件中。我必须在我的应用程序中使用 C,以便更容易从文本文件中读取,然后在 C 代码中进行整个转换。我已经从网上调整了一些示例代码,但我对 Python 的使用仍然不是很熟练。
当我运行我的 python 脚本时,它只产生两个十六进制值而不是八个。起初我以为这是来自黑白图像,但 RGB 图像应该包含黑色的 0x000000 和白色的 0xFFFFFF。
Python 脚本
from binascii import hexlify
import re
hexValNew = ''
placeHolder ='0'
file = open('Frame2.txt', 'w') #Create txt file for data
with open('Frame2.png', 'rb') as f:
binVal = f.read(1)
while len(binVal) != 0:
hexVal = hex(ord(binVal))
hexValNew = hexVal[2:4] #Remove "0x" from hex() process
hexValString = str(hexValNew)
if len(hexValString) == 1:
hexValString = placeHolder + hexValString
print hexVal
#print(hexValString) #Test Line
file.write(hexValString) #Write adjusted hex value to txt file
binVal = f.read(1)
file.close() #Close txt file
./a.out 部分
ff 00 62 26 e0 c4 a2 d7 c2 90 00 00 49 45 4e 44 ae 42 60 82
据我了解,该值应返回八位数字,而不仅仅是两位。
【问题讨论】:
-
你按字节读取,一个字节的十六进制值有一位或两位。
-
例如,如果我采用 a.out 的第一部分,那么像素的实际值将是:0xff0062?但这仍然没有意义,图像是灰度的,所以应该有三个重复值,如 0x4b4b4b 否则它不会遵循灰度正确?
-
PNG 格式被压缩。要检索原始数据,您可以使用 Pillow 之类的库。
标签: python python-3.x image image-processing hex