如何将 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
类型,解决此问题的一种方法是将0
和255
范围内的值标准化,然后将生成的标准化值作为vector<unsigned char>
提供进入adaptiveThreshold
函数。
这乍一看可能看起来不错,但随着我原来的 vector<double>
中的值变得非常大并归一化到 0
到 255
的范围内,它会带来很大的精度损失。
所以,我想知道是否没有选项可以将adaptiveThreshold
函数用于更广泛的值。对我来说这似乎太不合逻辑了,它应该只适用于最大值为 255
的值......感觉就像我监督了一些非常简单的事情,但我不知道如何解决这个问题......
【问题讨论】:
不要学究气,但是您是否量化了在规范化您的值时损失了多少精度,以及它是否会对您的应用程序产生影响? 【参考方案1】:恐怕对于更广泛的值没有这样的选择。但是,由于 OpenCV 是开源的,因此很容易得出一个采用“双”值的版本。只要找到adaptiveThreshold()的源代码,改成自己用就行了。
【讨论】:
以上是关于如何将 OpenCV 中的adaptiveThreshold 用于大于 255 的值(即类型 CV_8UC1)?的主要内容,如果未能解决你的问题,请参考以下文章
如何将opencv灰度和彩色图像发送到Qt中的ftp服务器?
如何使用带有c ++的opencv库将下图中的黑色像素更改为红色像素
我应该如何将指向成员函数的指针传递给 OpenCV 中的 setMouseCallback?