我有一个16位的图像,我想转换成一个8位的图像。不过,我想做一些过滤之前,这。所有低于某个值(比如P1)的值都应该变为0。所有高于不同值(比如P2)的值都应该变成255。这些值之间的所有值应根据它们到P1和P2的距离进行缩放。你知道吗
以下代码执行此操作:
def transform(value):
if value < P1:
value = 0
elif value > P2:
value = 255
else:
value = (value - P1) * (255.0 / (P2 - P1))
return value
然后使用原始16位图像作为输入:
newImage= [[transform(value) for value in row] for row in originalImage]
然而,这是难以置信的缓慢。。。我也尝试过使用cv2.convertScaleAbs
来做同样的事情,虽然速度很快,但并不能完全满足我的要求。尤其是这个函数中的“Abs”部分让我无法使用。你知道吗
有没有不同的功能,我可以用更快的方式得到我想要的东西?你知道吗
我找到了一个使用
cv2.convertScaleAbs
的解决方案首先缩放要解释为int32的原始图像:
然后减去P1值,使所有小于P1的值为负:
然后将负值剪裁为0:
最后使用
convertScaleAbs
和正确的alpha:相关问题 更多 >
编程相关推荐