我在这里有两种方法似乎可以为创建二进制图像提供相同的结果,但我不确定它们在任何方面是否有所不同,或者当一种方法用于另一种方式时?有什么想法吗?感谢。
retval, sxbinary = cv2.threshold(abssx, 20, 100, cv2.THRESH_BINARY)
sxbinary = np.zeros_like(abssx)
sxbinary[(abssx >= 20) & (abssx <= 100)] = 1
答案 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()
实际上没有采用较低的上限阈值,只是较低的阈值和“最大”值,它将被分配给高于下限阈值的所有像素。