【问题标题】:Thresholding image using opencv library in python with different flags using for loop在python中使用opencv库对图像进行阈值处理,使用for循环具有不同的标志
【发布时间】:2020-04-01 00:22:48
【问题描述】:

我将 cv2 作为 cv 导入,创建了阈值标志列表,并连接了“cv”。使用标志,然后创建一个用于将标志作为参数传递的 for 循环。但是python显示TypeError。我附上了输出的图像。请帮助我使用循环或其他方式创建所有可能的阈值,除非每次都明确提及标志。

[]

【问题讨论】:

  • 请提供您的数据背景。数据是什么,数据源是什么?你想做什么?

标签: python opencv image-thresholding


【解决方案1】:

在 OpenCV 中,给定的阈值选项(例如 cv.THRESH_BINARY 或 cv.THRESH_BINARY_INV)实际上是常量整数值。您正在尝试使用字符串而不是这些整数值。这就是您收到类型错误的原因。如果您想在循环中应用所有这些不同的阈值,一种选择是为这些选项创建不同的列表,如下所示:

threshold_options = [cv.THRESH_BINARY, cv.THRESH_BINARY_INV, ...]

这样,您就可以在循环中使用此列表的值,如下所示:

retval, thresh = cv.threshold(img, 127, 255, threshold_options[i])

整个代码如下:

titles = [ 'THRESH_BINARY',
'THRESH_BINARY_INV',
'THRESH_MASK',
'THRESH_OTSU',
'THRESH_TOZERO',
'THRESH_TOZERO_INV',
'THRESH_TRIANGLE',
'THRESH_TRUNC']

threshold_options = [ cv.THRESH_BINARY,
cv.THRESH_BINARY_INV,
cv.THRESH_MASK,
cv.THRESH_OTSU,
cv.THRESH_TOZERO,
cv.THRESH_TOZERO_INV,
cv.THRESH_TRIANGLE,
cv.THRESH_TRUNC]


for i in range(len(titles)):
    retval, thresh = cv.threshold(img, 127, 255, threshold_options[i])
    plt.subplot(2,3,i+1), plt.title(titles[i]), plt.imshow(thresh, 'gray')
plt.show()

【讨论】:

    【解决方案2】:

    这可能是相关的:OpenCV Thresholding example

    首先,不需要使用range,你可以简单地使用for flag in titles:并传递flag。您是否检查过您的图像是否正确加载?您确定您的标志对您的错误负责吗?

    对于以后的帖子,请包含一个最小的可重现示例。

    【讨论】:

      【解决方案3】:

      您的代码不起作用,因为标志的类型是 int 而不是 string

      您可以打印类型:print(type(cv.THRESH_BINARY))
      结果是<class 'int'>

      您可以创建ints 的列表:

      th_flags = [cv.THRESH_BINARY, cv.THRESH_BINARY_INV, cv.THRESH_TRUNC, cv.THRESH_TOZERO, cv.THRESH_TOZERO_INV]
      
      for th in th_flags:
          retval, thresh = cv.threshold(img, 127, 255, th)
          cv.imshow('thresh', thresh)
          cv.waitKey(1000)
      
      cv.destroyAllWindows()
      

      代码并未涵盖所有可能的选项
      很少有标志可以使用求和来组合。

      例子:

      _, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
      

      【讨论】:

        猜你喜欢
        • 2020-07-05
        • 1970-01-01
        • 2021-02-10
        • 2014-11-30
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多