opencv convertTo函数详解
程序员文章站
2022-05-16 11:26:13
...
函数原型
void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;
函数描述
把一个矩阵从一种数据类型转换到另一种数据类型,同时可以带上缩放因子和增量,公式如下:
m(x,y) = saturate_cast<rType>(alpha * (*this) (x,y) + beta);
由于有数据类型的转换,所以需要用saturate_cast<rType>来处理数据的溢出。
参数解释
m – 目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。
rtype – 目标矩阵的类型。因为目标矩阵的通道数与源矩阵一样,所以rtype也可以看做是目标矩阵的位深度。如果rtype为负值,目标矩阵和源矩阵将使用同样的类型。
alpha – 尺度变换因子(可选)。默认值是1。即把原矩阵中的每一个元素都乘以alpha。
beta – 附加到尺度变换后的值上的偏移量(可选)。默认值是0。即把原矩阵中的每一个元素都乘以alpha,再加上beta。
示例说明
在应用分水岭算法分割图像时,标记图像为32位有符号整型CV_32S变量(以便定义超过255个标签,每个值标记一类物体,如255标记目标,128标记背景,0标记未知等等)构成的矩阵markers,想要将标记图像显示出来必须转换其数据类型。
markers.convertTo(tmp,CV_8U,255,255);
将矩阵markers转换为CV_8U类型的矩阵tmp:tmp(x,y)= markers(x,y)*255+255.这样,将图像做线性变换,使值为-1的像素变为0(-1*255+255=0)。值大于255的像素将赋值为255,这是因为CV32S转换为无符号CV_8U时,应用了饱和度运算。具体应用参看分水岭算法的相关博文。
上一篇: [ 二叉树 ] 二叉搜索树中的插入操作