【问题标题】:Apply opencv threshold to a numpy array将 opencv 阈值应用于 numpy 数组
【发布时间】:2011-04-23 15:18:31
【问题描述】:

我正在尝试将 opencv 的 Threshold 函数应用于 numpy 数组。我正在为 opencv 2.1 使用 python 绑定。它是这样的:

import cv
import numpy as np
a = np.random.rand(1024,768)
cv.Threshold(a,a,0.5,1,cv.CV_THRESH_BINARY)

这会引发错误:

OpenCV Error: Unsupported format or combination of formats () in threshold

所以,我不相信我知道自己在做什么,但我希望 Threshold 能像 Smooth 那样工作,我可以在其中运行

cv.Smooth(a,a)

没有任何问题,最终得到一个平滑的图像。我不确定如何考虑 numpy 数组的“格式”,因为 opencv 看到它们,但是如果我不需要,我不愿意将 numpy 数组转换为 opencv 图像格式(而且我所有的尝试都失败了,所以反正远)。

我想知道为什么Threshold 不能以我试图让它工作的明显幼稚的方式工作,很高兴知道我应该做什么。

附:我知道我可以自己对 numpy 数组执行阈值操作,但我正在尝试找出 opencv。

【问题讨论】:

    标签: python opencv numpy


    【解决方案1】:

    显然Threshold 方法比 Smooth 更繁琐——它只适用于 8 位整数/32 位浮点数组(请参阅here),因此上面的代码 sn-p 不起作用,因为 numpy 数组默认为浮动64。

    因此,如果您更改创建数组的行以强制精度为 32 位浮点数

    >>> a = np.array(np.random.rand(1024,768),dtype=‘float32’)
    

    然后很高兴阈值:

    >>> ((a>0) & (a<1)).sum()
    786432
    >>> cv.Threshold(a,a,0.5,1,cv.CV_THRESH_BINARY)
    >>> ((a>0) & (a<1)).sum()
    0
    

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 2018-04-21
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多