OpenCV max Mat类型的可能值

时间:2017-04-28 04:42:48

标签: c++ matlab opencv

我想查找是否有实用函数或变量输出特定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种不同的图像类型上运行,并输出具有相同数量的颜色通道的双重图像,通过除以原始数据类型中的最大允许值进行缩放。

因此,如果能够获得输入数据类型的最大值并将其输入到这些函数中,OpenCV函数convertTo()normalize()将能够执行相同的操作。

特别是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>,那么<?php // connect to mongodb $m = new MongoClient(); echo "Connection to database successfully"; // select a database $db = $m->mydb; echo "Database mydb selected"; $collection = $db->mycol; echo "Collection selected succsessfully"; $inputTextValue= array( "key" => "value", ); $collection->insert($inputTextValue); echo "inputTextValue inserted successfully"; ?> 将完全相同。

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。希望这对其他人也有用。

效用函数saturate_cast()可以对所需类型的最小值和最大值执行限幅。为了除以任意类型的最大可能值,使用图像类型可以在OpenCV中获取的最大数字,并使其与目标类型相同,与图像相同。这适用于未签名的图像。对于带有有符号值的图像,在正负侧饱和,然后移位和缩放。

在此处查看saturate_cast的OpenCV文档:http://docs.opencv.org/3.1.0/db/de0/group__core__utils.html#gab93126370b85fda2c8bfaf8c811faeaf

编辑:显而易见的解决方案是为不同的可用Mat类型编写七个if语句:CV_8U,CV_8S,CV_16U,CV_16S,CV_32S,CV_32F,CV_64F,我认为这不会太烦人且更清楚读者。

我将尽快使用两种解决方案的代码更新此答案。