我正在处理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理念。
非常感谢任何帮助。
谢谢, 格特
答案 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,将在剪辑之前溢出。