使用十六进制将图像文件转换为文本文件

2024-07-08 16:13:18 发布

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

你好,我正在尝试用Python做学校项目,我被卡住了,所以我需要一些帮助。 我正在尝试导入一个图像并读取它,然后以六边形导出文本文件。在

例如,我用MS Paint enter image description here制作的这幅图像

假设这是一个9像素的图像。我想导入这个图像,并把它转换成一个文本文件,读起来像

FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF

使用Python可以实现吗?还是需要另一种编程语言来实现? 提前谢谢各位!(如果我英语不好很抱歉)


Tags: 项目图像像素编程语言学校ms文本文件paint
3条回答

我不太会说Python,但我已经试着学了一些,这似乎符合你的要求。我可能不是很python,但至少它只使用PIL,它比OpenCV小很多,安装起来也更容易!在

#!/usr/local/bin/python3
import sys
from PIL import Image

# Check image supplied as argument
if len(sys.argv)!=2:
    sys.exit("ERROR: Please specify a file")

# Load image
img=Image.open(sys.argv[1])

# Retrieve dimensions
w,h=img.size

# Make RGB if palettised
if img.mode=="P":
    img=img.convert('RGB')

p=img.load()
for y in range(0,h):
    for x in range(0,w):
        r,g,b=p[x,y]
        str="%02x%02x%02x "%(r,g,b)
        print(str,end='')
    print()

使用ImageMagick可以在命令行中完成,而不需要Python,ImageMagick安装在大多数Linux发行版上,适用于macOS和Windows。在

它将适用于PNG,JPEG和大约200种其他图像类型。让我们制作一个示例图像:

convert xc:red  xc:blue xc:lime +append    \
     \( xc:blue xc:red  xc:lime +append \) \
     \( xc:lime xc:red  xc:blue +append \) \
     -append start.png

让我们把它放大,这样你就能看到它(我本来可以一次性完成的):

^{pr2}$

enter image description here

现在针对您的问题,我可以将其转换为原始RGB(通过解释所有图像大小、调色板、压缩和标题)并通过xxd进行十六进制格式:

convert start.png -depth 8 rgb: | xxd -g3 -c9 -u
00000000: FF0000 0000FF 00FF00  .........
00000009: 0000FF FF0000 00FF00  .........
00000012: 00FF00 FF0000 0000FF  .........

如果要去掉前面的地址和结尾的点,可以使用:

convert start.png -depth 8 rgb: | xxd -g3 -c9 -u | sed 's/  .*//; s/^.*: //'
FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF

sed命令表示。。。“只要你看到两个空格,就把它们和后面的所有空格都去掉。删除所有包含冒号和空格的内容。“。在

或者是普通垃圾场更好:

convert start.png -depth 8 rgb: | xxd -g3 -c9 -u -p
FF00000000FF00FF00
0000FFFF000000FF00
00FF00FF00000000FF

注意:如果使用ImageMagickv7+,那么在上面的所有示例中,将convert替换为magick。在

opencv可以简单地读取图像。在

import cv2

img = cv2.imread('image.png')
print(img.shape)

cy=img.shape[0]
cx=img.shape[1]
f = open('img.txt', 'w')
for row in img:
    for col in row:
        str="%02x%02x%02x"%(col[0], col[1], col[2])
        f.write(str)
f.close()

相关问题 更多 >

    热门问题