繁体   English   中英

如何在OpenCV中执行图像阈值处理和规范化?

[英]How to perform image thresholding and normalization in OpenCV?

我有一个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做同样的cv2.convertScaleAbs ,这很快,但并不完全做我想要的。 特别是这个功能中的'Abs'部分让我无法使用。

我可以使用不同的功能以更快的方式获得我想要的东西吗?

我找到了一个使用cv2.convertScaleAbs的解决方案

首先将原始图像缩放为int32:

originalImage = numpy.array(originalImage, dtype=np.int32)

然后减去P1值,使所有小于P1的值为负:

newImage = np.array(originalImage - P1)

然后将负值剪辑为0:

newImage = newImage.clip(min=0)

最后使用带有正确alpha的convertScaleAbs

alpha = 255.0 / (P2 - P1)
newImage= cv2.convertScaleAbs(newImage, alpha=alpha)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM