OpenCV Mat类型的最大可能值是多少?

3
我希望找到一个实用函数或变量,可以输出特定Mat类型所能达到的最大值。例如,CV_U8的最大可能值为255。

示例案例

Matlab有几个内置函数,可以接受任意图像类型的图像,并将其转换(必要时进行缩放)为另一种图像类型。

例如,Matlab有函数im2double。运行help im2double将显示:

Class Support
-------------
Intensity and truecolor images can be uint8, uint16, double, logical,
single, or int16. Indexed images can be uint8, uint16, double or
logical. Binary input images must be logical. The output image is double.

因此它可以运行在10种不同的图像类型上,并且输出带有相同数量色彩通道的双倍图像,通过将原始数据类型中允许的最大值除以比例缩放。

因此,如果能够获取输入数据类型的最大值并将其输入到convertTo()normalize()函数中,则这两个OpenCV函数也可以完成相同的任务。

特别地,convertTo(dst, type, scale)将会完全按照一项任务执行,如果我们能够使用scale = 1/<max_value_of_input_type>,而normalize(src, dst, alpha, beta, NORM_MINMAX)将使用alpha = <src_min>/<max_value_of_input_type>beta = <src_max>/<max_value_of_input_type>


@DenizBeker 我不是在问如何在已知类型的情况下转换图像——我在我的问题中引用了两种方法。我感兴趣的是将任意Mat类型的图像转换。 - alkasm
1个回答

2
实用函数`saturate_cast()`可以对所需类型的最小值和最大值进行剪裁。为了除以任意类型的最大可能值,请使用OpenCV图像类型可以采取的最大数字,并将其与与图像相同的目标类型饱和。这适用于无符号图像。对于带有有符号值的图像,应在正侧和负侧饱和,然后进行移位和缩放。

请参阅此处的OpenCV文档中的`saturate_cast`:http://docs.opencv.org/3.1.0/db/de0/group__core__utils.html#gab93126370b85fda2c8bfaf8c811faeaf

编辑:显而易见的解决方案是编写七个if语句,针对不同可用的Mat类型:CV_8U、CV_8S、CV_16U、CV_16S、CV_32S、CV_32F、CV_64F,这可能并不太烦人,并且对读者更加清晰。

1
你还在处理源代码吗?如果能在这里提供源代码就太好了。 - NewTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接