用于创建二值图像的图像阈值的不同方法

时间:2016-12-18 22:22:36

标签: opencv image-processing

我在这里有两种方法似乎可以为创建二进制图像提供相同的结果,但我不确定它们在任何方面是否有所不同,或者当一种方法用于另一种方式时?有什么想法吗?感谢。

retval, sxbinary = cv2.threshold(abssx, 20, 100, cv2.THRESH_BINARY) 

sxbinary = np.zeros_like(abssx)
sxbinary[(abssx >= 20) & (abssx <= 100)] = 1    

2 个答案:

答案 0 :(得分:1)

如果您查看cv2.threshold()方法的documentation,则可能会发现params定义为:

cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
  

src - 输入数组(单通道,8位或32位浮点)。

     

dst - 输出与src大小和类型相同的数组。

     

阈值 - 阈值。

     

maxval - 与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用的最大值。

     

type - thresholding type

因此,使用100作为值传递的第三个参数实际上是用于高于给定阈值20的像素的强度值,以numpy格式写入相同的内容将类似于:< / p>

sxbinary[(abssx >= 20)] = 100

但是,如果要分割给定范围内的像素,则需要查看cv2.inRange()方法

答案 1 :(得分:0)

这是我的问题的正确答案:

问题是cv2.threshold()实际上没有采用较低的上限阈值,只是较低的阈值和“最大”值,它将被分配给高于下限阈值的所有像素。