使用Hexademicals将图像文件转换为文本文件

时间:2018-03-28 08:37:08

标签: python image-processing rgb

您好,我正在尝试使用Python进行学校项目,而且我遇到了困难,所以我想要一些帮助。 我尝试导入图像并读取它并导出十六化学文本文件。

例如,我用MS Paint enter image description here

制作了这张图片

让我们假装这是一个9像素的图像。我想导入这个图像并将其转换为一个文本文件,读取像

这样的东西
FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF

使用Python可以实现吗?或者我还需要其他编程语言吗? 先谢谢你们!(对不起,如果我的英语不好)

3 个答案:

答案 0 :(得分:2)

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

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

let actionSheet = this.actionSheetCtrl.create({

  title: 'Modify your album',

  buttons: [

    {

      text: 'Destructive',

      role: 'destructive',

      handler: () => {

        console.log('Destructive clicked');

      }

    },{

      text: 'Archive',

      handler: () => {

        console.log('Archive clicked');

      }

    },{

      text: 'Cancel',

      role: 'cancel',

      handler: () => {

        console.log('Cancel clicked');

      }

    }

  ]

});

actionSheet.present();

让我们放大它以便你可以看到它(我本可以一次性完成):

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

enter image description here

现在问题,我可以将其转换为原始RGB(通过解释所有图像大小,调色板,压缩和标题)并将其传递给convert start.png -scale 400x start.png 以进行十六进制格式化:

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

注意:如果使用 ImageMagick v7 +,请在上述所有示例中将convert start.png -depth 8 rgb: | xxd -g3 -c9 -u -p FF00000000FF00FF00 0000FFFF000000FF00 00FF00FF00000000FF 替换为convert

答案 1 :(得分:2)

我真的不会说Python,但我试图学习一些,这似乎就是你所要求的。我可能不是Pythonic,但至少它只使用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()

答案 2 :(得分:1)

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()