【发布时间】:2019-07-08 06:45:10
【问题描述】:
我正在尝试使用cv2.adaptiveThreshold(),但就我的目的而言,如果我可以将阈值设为零而不是二进制,那将是理想的。我尝试使用标志 cv2.THRESH_TOZERO 就像你可以使用 cv2.threshold() 一样,但它引发了错误。我怎么能做到这一点,如果我不能用adaptiveThreshold() 做到这一点,我该怎么做?感谢您的帮助。
【问题讨论】:
我正在尝试使用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 找到二进制图像等于零的位置,并将这些位置的原始灰度图像设置为零。
【讨论】:
从opencvdocumentation,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)
【讨论】:
maxValue 更改为 1。