乘以numpy图像数组

时间:2016-06-01 03:49:35

标签: python numpy

我正在处理numpy中的图像,在某些时候我会缩放图像。

import scipy.misc        as msc
import numpy             as np
...
img_rgb = msc.imread(img_fn)
im_scaled = img_rgb * factor

结果有时看起来很丑,明亮的区域显示出黑点。这似乎是由8位图像RGB像素的数值溢出引起的。 有没有办法应用一个上限算子,如果乘法是> 255它被剪裁为255.(我对楼层功能不感兴趣,因为我不希望信号变为负值)

我知道我可以测试循环中的每个像素,但不会遵循数组处理的numpy理念。

非常感谢任何帮助。

谢谢, 格特

2 个答案:

答案 0 :(得分:1)

您可以使用numpy.clip(),但确实如此。

然而,图像可能也不会很漂亮。通常,你想要的是将图像值从[0,255]范围内的字节转换为浮点数,在[0,1]范围内(即使是隐式),并应用gamma correction

答案 1 :(得分:0)

使用np.clip(x*float(factor), 0, 255).astype(np.uint8)

例如

x = np.array([120, 140], dtype=np.uint8)
factor = 2
result = np.clip(x*float(factor), 0, 255).astype(np.uint8)
> array([240, 255], dtype=uint8)

请注意,float(factor) 很重要,因为如果将其保留为 int,将在剪辑之前溢出。