對於圖像處理類,我在單色圖像上進行點操作。像素是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。作業是要自己做點操作,但是學習其他方法會很好。 –