【问题标题】:How do I threshold to zero using adaptive thresholding in opencv?如何在opencv中使用自适应阈值将阈值设为零?
【发布时间】:2019-07-08 06:45:10
【问题描述】:

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

【问题讨论】:

    标签: python opencv


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      从opencvdocumentationcv2.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)
      

      【讨论】:

      • 这对我不起作用。当我这样做时,它看起来像原始的二进制图像,但有一些奇怪的灰色污迹。
      • @tr2002a。我编辑了代码。将 maxValue 更改为 1。
      猜你喜欢
      • 2014-04-03
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2016-02-03
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多