如何在 opencv 中使用自适应阈值将阈值降至零?



我正在尝试使用cv2.adaptiveThreshold()但出于我的目的,如果我可以将阈值设置为零而不是二进制,那将是理想的。我尝试使用标志cv2.THRESH_TOZERO就像您可以使用cv2.threshold()一样,但它抛出了一个错误。我怎么能做到这一点,如果我不能用adaptiveThreshold()做到这一点,否则我怎么能做到这一点?感谢您的任何帮助。

我想通了。无论如何,感谢您@Masoud的帮助! 我使用了以下代码:

imgb = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,  
cv2.THRESH_BINARY, 255, -9)
img[np.where(imgb == 0)] = 0

我使用 numpy 查找二进制图像等于零的位置,并将这些位置的原始灰度图像设置为零。

根据 opencv 文档,cv2.adaptiveThreshold只有两种阈值类型:

必须为 THRESH_BINARY 或 THRESH_BINARY_INV 的阈值类型。

因此,对于自适应股权,如果需要类似的cv2.THRESH_TOZERO行为,则可以通过阈值生成原始图像和二进制图像。例如:

thresh_binary = cv2.adaptiveThreshold(img, 1, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 220)
thresh_tozero = cv2.multiply(img, thresh_binary)

最新更新