如何使用 OpenCV 的 adaptiveThreshold 获取大于 255 的值(即类型 CV_8UC1)?
How to use adaptiveThreshold from OpenCV for values larger than 255 (i.e. type CV_8UC1)?
我想使用 OpenCV 中的 adaptiveThreshold
函数来为 vector<double>
.[=29= 中的值确定适当的局部阈值]
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
的值......感觉我监督的事情非常简单但我无法弄清楚如何解决这个问题......
恐怕没有适用于更广泛值的选项。但是由于 OpenCV 是开源的,因此很容易导出一个采用 'double' 值的版本。找到adaptiveThreshold()的源码改成自己用就行了
我想使用 OpenCV 中的 adaptiveThreshold
函数来为 vector<double>
.[=29= 中的值确定适当的局部阈值]
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
的值......感觉我监督的事情非常简单但我无法弄清楚如何解决这个问题......
恐怕没有适用于更广泛值的选项。但是由于 OpenCV 是开源的,因此很容易导出一个采用 'double' 值的版本。找到adaptiveThreshold()的源码改成自己用就行了