我有一个脚本,列出图像中十六进制的所有像素数据。 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图片我正在用于测试
答案 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
答案 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()