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 で機能し、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 に答える