如何将 OpenCV 中的adaptiveThreshold 用于大于 255 的值(即类型 CV_8UC1)?

Posted

技术标签:

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

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

adaptiveThreshold在docs中指定如下:

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 的值......感觉就像我监督了一些非常简单的事情,但我不知道如何解决这个问题......

【问题讨论】:

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

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

【讨论】:

以上是关于如何将 OpenCV 中的adaptiveThreshold 用于大于 255 的值(即类型 CV_8UC1)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将opencv灰度和彩色图像发送到Qt中的ftp服务器?

如何使用带有c ++的opencv库将下图中的黑色像素更改为红色像素

我应该如何将指向成员函数的指针传递给 OpenCV 中的 setMouseCallback?

如何将 OpenCV 中的adaptiveThreshold 用于大于 255 的值(即类型 CV_8UC1)?

如何将一个点附加到opencv c中的另一个点

如何使用 OpenCV 将向量的结构复制到 C++ 中的另一个向量