【问题标题】:Python module Mahotas thresholding issuePython模块Mahotas阈值问题
【发布时间】:2013-12-02 10:13:46
【问题描述】:

我正在使用本教程 http://pythonvision.org/basic-tutorial

但是,当我传递 png 图像时:

T = mahotas.thresholding.otsu(dna)

我收到一个错误:

TypeError: mahotas.otsu: 这个函数只接受整数类型(传入的 float32 类型的数组)

有人有经验吗? w/这个问题?谢谢!

【问题讨论】:

    标签: python threshold mahotas


    【解决方案1】:

    该错误基本上表明图像数组中元素的类型是 32 位浮点数,而不是整数,这是必需的。文档还说这种方法需要无符号整数。见here

    要将 numpy 数组转换为无符号 8 位整数,请执行以下操作:

    # Assuming I is your image. Convert to 8 bit unsigned integers.
    I_uint8 = I.astype('uint8')
    

    更新:请参阅下面 Mahotas 的创建者对多通道图像问题的评论。

    【讨论】:

    • mahotas 的作者在这里:mahotas 的 otsu 将直接处理多通道图像(Otsu 只是在直方图上计算)。这对许多科学用途都是有意义的,而且,如果图像是 RGB 并且所有通道都具有相同的值,那么它会自动做正确的事情。
    • @luispedro:感谢您的评论。
    【解决方案2】:

    @lightalchemist 的解决方案有效,只需记住先将图像乘以 255:

    img = (img*255).astype('uint8')
    

    【讨论】:

    • 你能解释一下吗,为什么会这样??
    • 已经有一段时间了,所以我希望我的回答仍然适用:图像像素通常使用以下两个概念之一表示: - 要么作为 [0.0, 1.0] 范围内的浮点数,其中 0.0 表示黑色和 1.0 表示白色,或 - 作为 [0, 255] 范围内的整数,0 为黑色,255 为白色 OP 需要将图像从概念 1 转换为概念 2,因此像素值应缩放为 255,因此乘法。
    • 感谢您的解释,我很感激!
    【解决方案3】:

    我也在关注这个例子。经过高斯滤波后,dnaf变成了float64

    print(dnaf.dtype)
    

    您需要转换回 8 位图像

    dnaf = dnaf.astype('uint8')
    print(dnaf.dtype)
    

    并继续进行阈值处理

    T = mh.thresholding.otsu(dnaf)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2012-11-14
      • 2015-09-13
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多