知方号

知方号

OpenCV之颜色空间转换:cvtColor()和convertTo()函数

OpenCV之颜色空间转换:cvtColor()和convertTo()函数

OpenCV之颜色空间转换:cvtColor()和convertTo()函数

OpenCV中用于颜色空间转换的函数是cvtColor(),而convertTo()函数也经常会动到,这两个函数看起来有点像,所以这里顺便介绍一下二者的区别。 1、cvtColor() 它是OpenCV库中的函数,包含OpenCV头文件和命名空间后可直接引用,字面意思是颜色转换,功能是颜色类型转换。 函数原型如下:

C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );

. InputArray src: 输入图像,可以是Mat类; . OutputArray dst: 输出图像,可以是Mat类; . int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片; . int dstCn = 0: 目标图像通道数,如果取值为0,表示目标图像取源图像的通道数。 code标识符列举如下图所示: 将相应的标识符赋值给code就可进行相应的转换了。例如将RGB图像转换成灰度图像,用法如下:

cvtColor(srcimg, dstimg, CV_BGR2GRAY,1);

特别说明其转换公式为: RGB to Gray:Y=0.299R+0.587G+0.114*B;

需要注意的是:对于非线性转换,输入的RGB图像必须归一化到其对应的取值范围来或得最终正确的转换结果,例如从RGB->Luv转换。如果从一个8-bit类型图像不经过任何缩放直接转换为32-bit浮点型图像,函数将会以0-255的取值范围来取代0-1的取值范围,所以在使用cvtColor函数之前需要对图像进行缩放如下:

srcimg *= 1./255;cvtColor(srcimg, dstimg, CV_BGR2Luv);

2、convertTo() 它是OpenCV中Mat类的成员函数,需要实例化出Mat对象才能调用,字面意思是“转换到”,功能是将Mat进行类型转换。 convertTo()有很多重载版本,一个常用函数原型如下:

void cv:Mat:convertTo(cvr:OutputArray m, int rtype, double alpha = (1.0), double beta = (0.0)) const

第一个参数是输出Mat类对象,尺寸与调用改函数的Mat类对象一直; 第二个参数是输出Mat类对象的类型; 第三个参数表示缩放因子; 第四个参数表示偏移量。 输出Mat类对象的值将按如下公式计算: m(i,j)=src(i,j)*scale+shift;scale=1,shift=0表示无缩放,输出将等于输入。 所以前面将8位3通道RGB归一化也可使用如下代码实现:

srcimg.convertTo(dst,CV_32FC3,1.0/255,0);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。