画像処理クラスでは、モノクロ画像に対して点操作を行っています。ピクセルはuint8 [0,255]です。numpy uint8ピクセルラッピングソリューション
numpy uint8は折り返します。たとえば、235 + 30 = 9です。ラッピングの代わりにピクセルを飽和(max = 255)または切り捨て(min = 0)する必要があります。
私の解決策では、ポイントの計算にint32ピクセルを使用し、次にイメージを保存するためにuint8に変換します。
これが最善の方法ですか?または、より速い方法がありますか?
#!/usr/bin/python
import sys
import numpy as np
import Image
def to_uint8(data) :
# maximum pixel
latch = np.zeros_like(data)
latch[:] = 255
# minimum pixel
zeros = np.zeros_like(data)
# unrolled to illustrate steps
d = np.maximum(zeros, data)
d = np.minimum(latch, d)
# cast to uint8
return np.asarray(d, dtype="uint8")
infilename=sys.argv[1]
img = Image.open(infilename)
data32 = np.asarray(img, dtype="int32")
data32 += 30
data_u8 = to_uint8(data32)
outimg = Image.fromarray(data_u8, "L")
outimg.save("out.png")
入力画像:
出力画像:
np.clip()はまさに私です必要だった。ありがとう! ImageEnhanceも読み上げます。宿題は自分自身で行うのではなく、他のやり方を学ぶことができます。 –