【问题标题】:How to use adaptiveThreshold from OpenCV for values larger than 255 (i.e. type CV_8UC1)?如何将 OpenCV 中的adaptiveThreshold 用于大于 255 的值(即类型 CV_8UC1)?
【发布时间】:2015-04-17 10:40:33
【问题描述】:

我想使用 OpenCV 中的 adaptiveThreshold 函数来确定 vector<double> 中值的适当的本地阈值。

adaptiveThresholddocs中指定如下:

void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)

请注意,src 必须是源 8 位单通道图像(因此,如果我理解正确,请输入CV_8UC1 类型,如果我“我错了……)。

由于我的vector<double> 不是CV_8UC1 类型,解决此问题的一种方法是将0255 范围内的值标准化,然后将生成的标准化值作为vector<unsigned char> 提供进入adaptiveThreshold函数。

这乍一看可能看起来不错,但随着我原来的 vector<double> 中的值变得非常大并归一化到 0255 的范围内,它会带来很大的精度损失。

所以,我想知道是否没有选项可以将adaptiveThreshold 函数用于更广泛的值。对我来说这似乎太不合逻辑了,它应该只适用于最大值为 255 的值......感觉就像我监督了一些非常简单的事情,但我不知道如何解决这个问题......

【问题讨论】:

  • 不要学究气,但是您是否量化了在规范化您的值时损失了多少精度,以及它是否会对您的应用程序产生影响?

标签: c++ opencv image-processing vector adaptive-threshold


【解决方案1】:

恐怕对于更广泛的值没有这样的选择。但是,由于 OpenCV 是开源的,因此很容易得出一个采用“双”值的版本。只要找到adaptiveThreshold()的源代码,改成自己用就行了。

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多