gpt4 book ai didi

python - 将 opencv 阈值应用于 numpy 数组

转载 作者:太空狗 更新时间:2023-10-29 21:32:52 25 4
gpt4 key购买 nike

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

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。

最佳答案

显然 Threshold 方法比 Smooth 更挑剔 - 它只适用于 8 位整数/32 位 float 组(参见 here )所以你上面的代码片段不会工作,因为 numpy数组默认为 float64。

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

>>> 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

关于python - 将 opencv 阈值应用于 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3903432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com