如何在opencv中使用自适应阈值将阈值设置为零?

时间:2019-07-05 21:44:26

标签: python opencv

我正在尝试使用data_dir,但出于我的目的,如果我可以将阈值设置为零而不是二进制,那将是理想的选择。我尝试像使用cv2.adaptiveThreshold()一样使用标志cv2.THRESH_TOZERO,但这引发了错误。我该怎么办?如果我无法使用cv2.threshold()做这件事,我该如何做呢?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我知道了。无论如何,感谢您对@Masoud的帮助! 我使用了这段代码:

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

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

答案 1 :(得分:0)

在opencv documentation中,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)