逐像素重建python中的图像

时间:2017-09-02 16:59:55

标签: python image-processing

我有一个脚本,列出图像中十六进制的所有像素数据。 PIL或类似的库是否有一种从输出文本重建图像的简单方法?这就是我用来获取数据的原因

"Error: operand size mismatch for 'int'"

输出(剪辑)

#!/usr/bin/python
from PIL import Image

def rgb2hex(r, g, b):
    return '#{:02x}{:02x}{:02x}'.format(r, g, b)

img = Image.open('apple_raw.png')

if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):   
    pixels = img.convert('RGBA').load()
    width, height = img.size

    for x in range(width):
        for y in range(height):
            r, g, b, a = pixels[x, y]
            print '%s,%s,%s' % (x, y, rgb2hex(r, g, b))

http://imgur.com/a/5YT9H图片我正在用于测试

2 个答案:

答案 0 :(得分:1)

您可以创建新图像并设置该图像的像素数据:

width, height = (305, 314)

new_image = Image.new('RGB', (width, height))
data = new_image.load()

for y in range(height):
    for x in range(width):
        data[(x, y)] = (r, g, b)

new_image.save('foo.png', 'png')  # or another format

同时查看Image.frombytesImage.fromstring

答案 1 :(得分:0)

我最终更改了我的代码以提取rgb而不是hex(255,255,255),我很难从一个文件中分割x,y和rgb元组,所以我将文件拆分为两个文件,一个用于RGB和一个坐标。然后我使用numpy和scipy来映射像素。这是代码,以防其他人试图做类似的事情。它可能不是实现这一目标的理想方式,但我得到了理想的结果。

import numpy as np
import itertools
import scipy.misc as sc

img = np.zeros((305,314,3), dtype=np.uint8) 

with open ('coordinates') as coord, open('rgbvalues') as rgb:
    for coord,rgb in itertools.izip(coord,rgb):
        rgb = map(int, rgb.split(','))
        r = rgb

        coord = map(int, coord.split(','))
        c = coord
        img[c[0],c[1]] = [r[0],r[1],r[2]]
    img = sc.toimage(img)
    img.show()