使用Python我试图将B / W图像的每个像素转换为十六进制并将其存储在“.txt”文件中。我必须使用C作为我的应用程序,因此它更容易从文本文件中读取,然后在C代码中执行整个转换。我已经从网上调整了一些示例代码,但我仍然没有使用Python的经验。
当我运行我的python脚本时,它只生成两个十六进制值而不是八个。起初我以为这是来自图像的B / W,但是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
根据我的理解,该值应该返回八位数而不仅仅是两位数。
在Unix上的ImageMagick中,您可以执行以下操作:
convert rose.png:[5x5] txt: | tail -n +2 | sed 's/[ ][ ]*/ /g' | awk '{print $1,$3}'
0,0: #414042
1,0: #634040
2,0: #B53D30
3,0: #A54845
4,0: #998886
0,1: #6A6674
1,1: #C0494A
2,1: #E4312B
3,1: #DB403F
4,1: #98936E
0,2: #77796F
1,2: #CA948B
2,2: #A94D43
3,2: #603D31
4,2: #405937
格式为column,row:hex。
如果需要,您可以将其重定向到文件。我不是Windows用户。但是有可能是Windows等价的Unix命令。如果没有,那么你可以解析txt的输出:见https://imagemagick.org/Usage/files/#txt
我建议你根本不打算写任何Python,而只是使用终端中的ImageMagick将任何PNG,JPEG或其他格式文件转换为NetPBM格式,请参阅Wikipedia description.
请特别注意以P2(ASCII)或P5(二进制)格式开头的PGM格式。使用C读取非常简单。因此,要将PNG图像转换为PGM P2(ASCII)格式,请在终端使用中:
magick input.png -depth 8 -colorspace gray -compress none result.pgm
并使用任何文本编辑器查看您的文件。
要将JPEG文件转换为PGM P5(二进制)格式,请使用:
magick input.jpg -depth 8 -colorspace gray result.pgm