【问题标题】:Opencv Threshold Otsu with Threshold Binary Logic具有阈值二进制逻辑的 Opencv 阈值 Otsu
【发布时间】:2021-07-04 22:19:42
【问题描述】:

opencv threshold page 有这样的代码:

    import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('noisy2.png',0)
# global thresholding
ret1,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
# Otsu's thresholding
ret2,th2 = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# Otsu's thresholding after Gaussian filtering
blur = cv.GaussianBlur(img,(5,5),0)
ret3,th3 = cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# plot all the images and their histograms
images = [img, 0, th1,
          img, 0, th2,
          blur, 0, th3]
titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)',
          'Original Noisy Image','Histogram',"Otsu's Thresholding",
          'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]
for i in range(3):
    plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')
    plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])
    plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
    plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])
    plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')
    plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])
plt.show()

我的问题是 cv.THRESH_BINARY 指的是 0 而 cv.THRESH_OTSU 指的是 8。如果我将它们加在一起 ​​0+8 =8 那么为什么我使用 cv.THRESH_BINARY?我尝试不使用 thresh 二进制文件,但我的眼睛看不出有什么不同。还有其他我不知道的规则吗?

【问题讨论】:

  • 您是否尝试过使用 THRESH_BINARY_INV、THRESH_TRUNC 等...?
  • 我的意思是 + 号只是总结了 declerations 的值还是有其他含义?
  • cv.THRESH_BINARY+cv.THRESH_OTSU 中,cv.THRESH_BINARY+ 毫无意义。它只是一个占位符,因为您可以将 OTSU 与 cv.THRESH_BINARY_INV+cv.THRESH_OTSU 等其他方法结合使用。只需将cv.THRESH_BINARY+ 视为默认行为即可。此外,您不应该关心枚举的实际值:它是一个实现细节,可能会在未来的版本中发生变化
  • @Miki 我想这就是我的答案。您可以将其添加为答案,以便我可以关闭线程
  • 我现在不能,请随意发布您自己的答案。很高兴它有帮助

标签: python opencv image-processing image-thresholding


【解决方案1】:

cv.THRESH_BINARY+cv.THRESH_OTSU 中,cv.THRESH_BINARY+ 毫无意义。它只是一个占位符,因为您可以将 Otsu 与 cv.THRESH_BINARY_INV+cv.THRESH_OTSU 等其他方法结合使用。只需将cv.THRESH_BINARY+ 视为默认行为即可。此外,您不应该关心枚举的实际值:它是一个实现细节,可能会在未来的版本中发生变化。

Thanks to @Miki for this precious answer.

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多