3

我有一个存储为 .bin 文件的原始二进制图像,上面有一些重要数据。问题是颜色信息有点偏离,所以我需要稍微改变一下。有什么方法可以让我将 R、G 和 B 值乘以一个标量,然后将其保存为原始二进制文件?

我希望使用 python 成像库来做到这一点,因为我已经知道图像模块的基础知识。我需要将每个像素乘以相同的值,但对于 R、G 和 B,它将是不同的值。我有以下代码来打开文件,但是我不知道如何在那里改变 RGB 值.

fileName = raw_input("Enter a file name: ")

with open(fileName) as f:
    im = Image.fromstring('RGB', (3032, 2016), f.read())

如果您需要更多信息,请告诉我。

更新

我编写了以下代码,它以我想要的方式转换图像,但它给了我一个错误。代码如下:

with open(C:\Users\name\imagedata\visiblespec.bin, 'rb') as f:
    im = Image.fromstring('RGB', (3032, 2016), f.read())

im = im.convert('RGB')
r, g, b = im.split()
r = r.point(lambda i: i * (255/171))
g = g.point(lambda i: i * (255/107))
b = b.point(lambda i: i * (255/157))
out = Image.merge('RGB', (r, g, b))


out.save(C:\Users\name\imagedata\visiblespecredone.bin)

我的错误是这样的:

Traceback (most recent call last):
  File "C:\Users\Patrick\workspace\colorCorrect\src\rawImage.py", line 18, in <module>
    im = Image.fromstring('RGB', (3032, 2016), f.read()) 
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 1797, in fromstring
    im.fromstring(data, decoder_name, args)
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 594, in fromstring
    raise ValueError("not enough image data")
ValueError: not enough image data

这可能是编辑 RGB 值的完全错误的方法,我知道它适用于 JPEG,而 t 可能只适用于 JPEG,但这是我想做的。

4

2 回答 2

2
import numpy as np

shape = (2016, 3032)
im = np.fromfile('visiblespec.bin', 'uint16').reshape(shape)

def tile(pattern, shape):
    return np.tile(np.array(pattern, 'bool'), (shape[0] // 2, shape[1] // 2))

r = tile([[0, 0], [0, 1]], shape)
g = tile([[0, 1], [1, 0]], shape)
b = tile([[1, 0], [0, 0]], shape)

im = im.astype('float32')
im[r] *= 255 / 171.
im[g] *= 255 / 107.
im[b] *= 255 / 157.
np.rint(im, out=im)
np.clip(im, 0, 65535, out=im)
im = im.astype('uint16')

im.tofile('visiblespecredone.bin')
于 2012-06-07T18:59:08.843 回答
0

您可能希望使用 Python 绑定或PIL查看ImageMagick

如果您只需要读取文件并操作二进制数据,请执行以下操作:

with open(filename, 'rb') as img:
   wrd=img.read(2)
   while wrd:
       # wrd == 2 bytes == your 16 bits...
于 2012-06-06T22:41:49.743 回答