目录

前言

一、转换颜色空间

1、什么是颜色空间

2、颜色空间有哪些

1.BGR系列

2.灰度空间

3.HSV系列

4.其他

3、API——cvtColor

4、颜色空间转换代码ColorConversionCodes

二、转换图像类型

1、图像类型引入

2、常见图像类型

3、API——convertTo


前言

上一篇文章,我们讲到了掩膜操作,我们自己写掩膜操作的过程中,将图像转化为灰度图像。我们使用了转换色彩空间。今天我们就来讲下在opencv中的转换色彩空间和转换图像类型。

一、转换颜色空间

1、什么是颜色空间

我们的世界是五彩缤纷的,通过不同的颜色,带给我们不同的视觉盛宴。其实这些不同的颜色,都是可以由基本的颜色组成的,比如我们经常说的光学三原色、颜料三原色,我们可以通过三种颜色的配比,得到不同种各式各样的颜色。

比如上面这幅图的右面的图,我们可以构建一个三维的空间,当每个方向取不同的值,我们就能得到不同的颜色,这个就是颜色空间

2、颜色空间有哪些

我们知道什么是颜色空间,我们就来说一下常见的颜色空间有哪些吧!

1.BGR系列

最常见的就是BGR系列了,其中:

B表示blue,蓝色;

G表示green,绿色;

R表示red,红色;

我们可以通过不同的组合得到不同的颜色;每个取值范围都是0-255,如果用16进制表示就是 0-FF。

BGR系列表示有一定的问题:

1.RGB 颜色空间利用三个颜色分量的线性组合来表示颜色,任何颜色都与这三个分量有关。

2.自然界中,由于光照等问题的影响,颜色发生变化,而是哪个颜色分量和光照都有关,所以图像亮度改变,三个通道的颜色都会改变。

3.人眼睛对不同颜色的敏感程度不同,有时候难以对一个颜色进行区分。

4.适用于图像显示,不适用于图像处理。

我们可以打开电脑的画图工具,输入不同的值,来获取不同的图像:

2.灰度空间

灰度空间算是简化的BGR空间,BGR有三个通道,分别表示三个像素分量,灰度空间只有一个通道,取值范围也是0-255,值越大,颜色越趋向于白色,值越小,颜色越趋向于黑色。

对于下图,就是一个从0一直取值到255之后的图像:

3.HSV系列

除了BGR系列,我们最常见的是HSV系列了,其中:

H表示Hue,色调;用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;

S表示Saturation,饱和度;一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

V表示Value,明度;明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

所以我们表示HSV空间,通常使用一个柱面坐标系:

4.其他

除了上面的,还有很多颜色空间,比如:

1.CMY是工业印刷采用的颜色空间。它与RGB对应。简单的类比RGB来源于是物体发光,而CMY是依据反射光得到的。具体应用如打印机:一般采用四色墨盒,即CMY加黑色墨盒。

2.Lab:Lab颜色空间是由CIE(国际照明委员会)制定的一种色彩模式。自然界中任何一点色都可以在Lab空间 中表达出来,色彩空间比RGB空间大。Lab用数字化的方法来描述人的视觉感应。弥补了RGB和CMYK模式必须依赖于设备色彩特性的不足。

3.HSL:与HSV类似,主要差别在于L和V,L表示的是亮度,强调白色的亮度如何;V表示的是明度,表示光的亮度,可以是任何颜色光的亮度;

3、API——cvtColor

在opencv中提供了专门的API来调整色彩空间:

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

函数参数含义如下:

(1)InputArray类型的points,输入图像。

(2)OutputArray类型的dst,输出图像。

(3)int类型的code,颜色空间转换代码(具体请看“ColorConversionCodes”)。

(4)bool类型的returnPoints,目标图像中的通道数;如果参数为0,则通道数自动从src和code派生。

在使用过程中,我们需要指定转换代码,第四个参数一般都是默认。举个例子:

cvtColor(src, src1, COLOR_BGR2GRAY);

重点在于,第三个参数,都有哪些取值呢?接下来,让我们详细来看一下:

4、颜色空间转换代码ColorConversionCodes

我们上面接触到了一个转换代码:

上面确实是我们最常用的,我们经常需要将一个彩色图像,转化为一个灰度图像,然后做后续的一些操作,当然,我们还有其他的很多转换代码:

enum ColorConversionCodes {COLOR_BGR2BGRA     = 0, //!< add alpha channel to RGB or BGR imageCOLOR_RGB2RGBA     = COLOR_BGR2BGRA,COLOR_BGRA2BGR     = 1, //!< remove alpha channel from RGB or BGR imageCOLOR_RGBA2RGB     = COLOR_BGRA2BGR,COLOR_BGR2RGBA     = 2, //!< convert between RGB and BGR color spaces (with or without alpha channel)COLOR_RGB2BGRA     = COLOR_BGR2RGBA,COLOR_RGBA2BGR     = 3,COLOR_BGRA2RGB     = COLOR_RGBA2BGR,COLOR_BGR2RGB      = 4,COLOR_RGB2BGR      = COLOR_BGR2RGB,COLOR_BGRA2RGBA    = 5,COLOR_RGBA2BGRA    = COLOR_BGRA2RGBA,COLOR_BGR2GRAY     = 6, //!< convert between RGB/BGR and grayscale, @ref color_convert_rgb_gray "color conversions"COLOR_RGB2GRAY     = 7,COLOR_GRAY2BGR     = 8,COLOR_GRAY2RGB     = COLOR_GRAY2BGR,COLOR_GRAY2BGRA    = 9,COLOR_GRAY2RGBA    = COLOR_GRAY2BGRA,COLOR_BGRA2GRAY    = 10,COLOR_RGBA2GRAY    = 11,COLOR_BGR2BGR565   = 12, //!< convert between RGB/BGR and BGR565 (16-bit images)COLOR_RGB2BGR565   = 13,COLOR_BGR5652BGR   = 14,COLOR_BGR5652RGB   = 15,COLOR_BGRA2BGR565  = 16,COLOR_RGBA2BGR565  = 17,COLOR_BGR5652BGRA  = 18,COLOR_BGR5652RGBA  = 19,COLOR_GRAY2BGR565  = 20, //!< convert between grayscale to BGR565 (16-bit images)COLOR_BGR5652GRAY  = 21,COLOR_BGR2BGR555   = 22,  //!< convert between RGB/BGR and BGR555 (16-bit images)COLOR_RGB2BGR555   = 23,COLOR_BGR5552BGR   = 24,COLOR_BGR5552RGB   = 25,COLOR_BGRA2BGR555  = 26,COLOR_RGBA2BGR555  = 27,COLOR_BGR5552BGRA  = 28,COLOR_BGR5552RGBA  = 29,COLOR_GRAY2BGR555  = 30, //!< convert between grayscale and BGR555 (16-bit images)COLOR_BGR5552GRAY  = 31,COLOR_BGR2XYZ      = 32, //!< convert RGB/BGR to CIE XYZ, @ref color_convert_rgb_xyz "color conversions"COLOR_RGB2XYZ      = 33,COLOR_XYZ2BGR      = 34,COLOR_XYZ2RGB      = 35,COLOR_BGR2YCrCb    = 36, //!< convert RGB/BGR to luma-chroma (aka YCC), @ref color_convert_rgb_ycrcb "color conversions"COLOR_RGB2YCrCb    = 37,COLOR_YCrCb2BGR    = 38,COLOR_YCrCb2RGB    = 39,COLOR_BGR2HSV      = 40, //!< convert RGB/BGR to HSV (hue saturation value), @ref color_convert_rgb_hsv "color conversions"COLOR_RGB2HSV      = 41,COLOR_BGR2Lab      = 44, //!< convert RGB/BGR to CIE Lab, @ref color_convert_rgb_lab "color conversions"COLOR_RGB2Lab      = 45,COLOR_BGR2Luv      = 50, //!< convert RGB/BGR to CIE Luv, @ref color_convert_rgb_luv "color conversions"COLOR_RGB2Luv      = 51,COLOR_BGR2HLS      = 52, //!< convert RGB/BGR to HLS (hue lightness saturation), @ref color_convert_rgb_hls "color conversions"COLOR_RGB2HLS      = 53,COLOR_HSV2BGR      = 54, //!< backward conversions to RGB/BGRCOLOR_HSV2RGB      = 55,COLOR_Lab2BGR      = 56,COLOR_Lab2RGB      = 57,COLOR_Luv2BGR      = 58,COLOR_Luv2RGB      = 59,COLOR_HLS2BGR      = 60,COLOR_HLS2RGB      = 61,COLOR_BGR2HSV_FULL = 66,COLOR_RGB2HSV_FULL = 67,COLOR_BGR2HLS_FULL = 68,COLOR_RGB2HLS_FULL = 69,COLOR_HSV2BGR_FULL = 70,COLOR_HSV2RGB_FULL = 71,COLOR_HLS2BGR_FULL = 72,COLOR_HLS2RGB_FULL = 73,COLOR_LBGR2Lab     = 74,COLOR_LRGB2Lab     = 75,COLOR_LBGR2Luv     = 76,COLOR_LRGB2Luv     = 77,COLOR_Lab2LBGR     = 78,COLOR_Lab2LRGB     = 79,COLOR_Luv2LBGR     = 80,COLOR_Luv2LRGB     = 81,COLOR_BGR2YUV      = 82, //!< convert between RGB/BGR and YUVCOLOR_RGB2YUV      = 83,COLOR_YUV2BGR      = 84,COLOR_YUV2RGB      = 85,//! YUV 4:2:0 family to RGBCOLOR_YUV2RGB_NV12  = 90,COLOR_YUV2BGR_NV12  = 91,COLOR_YUV2RGB_NV21  = 92,COLOR_YUV2BGR_NV21  = 93,COLOR_YUV420sp2RGB  = COLOR_YUV2RGB_NV21,COLOR_YUV420sp2BGR  = COLOR_YUV2BGR_NV21,COLOR_YUV2RGBA_NV12 = 94,COLOR_YUV2BGRA_NV12 = 95,COLOR_YUV2RGBA_NV21 = 96,COLOR_YUV2BGRA_NV21 = 97,COLOR_YUV420sp2RGBA = COLOR_YUV2RGBA_NV21,COLOR_YUV420sp2BGRA = COLOR_YUV2BGRA_NV21,COLOR_YUV2RGB_YV12  = 98,COLOR_YUV2BGR_YV12  = 99,COLOR_YUV2RGB_IYUV  = 100,COLOR_YUV2BGR_IYUV  = 101,COLOR_YUV2RGB_I420  = COLOR_YUV2RGB_IYUV,COLOR_YUV2BGR_I420  = COLOR_YUV2BGR_IYUV,COLOR_YUV420p2RGB   = COLOR_YUV2RGB_YV12,COLOR_YUV420p2BGR   = COLOR_YUV2BGR_YV12,COLOR_YUV2RGBA_YV12 = 102,COLOR_YUV2BGRA_YV12 = 103,COLOR_YUV2RGBA_IYUV = 104,COLOR_YUV2BGRA_IYUV = 105,COLOR_YUV2RGBA_I420 = COLOR_YUV2RGBA_IYUV,COLOR_YUV2BGRA_I420 = COLOR_YUV2BGRA_IYUV,COLOR_YUV420p2RGBA  = COLOR_YUV2RGBA_YV12,COLOR_YUV420p2BGRA  = COLOR_YUV2BGRA_YV12,COLOR_YUV2GRAY_420  = 106,COLOR_YUV2GRAY_NV21 = COLOR_YUV2GRAY_420,COLOR_YUV2GRAY_NV12 = COLOR_YUV2GRAY_420,COLOR_YUV2GRAY_YV12 = COLOR_YUV2GRAY_420,COLOR_YUV2GRAY_IYUV = COLOR_YUV2GRAY_420,COLOR_YUV2GRAY_I420 = COLOR_YUV2GRAY_420,COLOR_YUV420sp2GRAY = COLOR_YUV2GRAY_420,COLOR_YUV420p2GRAY  = COLOR_YUV2GRAY_420,//! YUV 4:2:2 family to RGBCOLOR_YUV2RGB_UYVY = 107,COLOR_YUV2BGR_UYVY = 108,//COLOR_YUV2RGB_VYUY = 109,//COLOR_YUV2BGR_VYUY = 110,COLOR_YUV2RGB_Y422 = COLOR_YUV2RGB_UYVY,COLOR_YUV2BGR_Y422 = COLOR_YUV2BGR_UYVY,COLOR_YUV2RGB_UYNV = COLOR_YUV2RGB_UYVY,COLOR_YUV2BGR_UYNV = COLOR_YUV2BGR_UYVY,COLOR_YUV2RGBA_UYVY = 111,COLOR_YUV2BGRA_UYVY = 112,//COLOR_YUV2RGBA_VYUY = 113,//COLOR_YUV2BGRA_VYUY = 114,COLOR_YUV2RGBA_Y422 = COLOR_YUV2RGBA_UYVY,COLOR_YUV2BGRA_Y422 = COLOR_YUV2BGRA_UYVY,COLOR_YUV2RGBA_UYNV = COLOR_YUV2RGBA_UYVY,COLOR_YUV2BGRA_UYNV = COLOR_YUV2BGRA_UYVY,COLOR_YUV2RGB_YUY2 = 115,COLOR_YUV2BGR_YUY2 = 116,COLOR_YUV2RGB_YVYU = 117,COLOR_YUV2BGR_YVYU = 118,COLOR_YUV2RGB_YUYV = COLOR_YUV2RGB_YUY2,COLOR_YUV2BGR_YUYV = COLOR_YUV2BGR_YUY2,COLOR_YUV2RGB_YUNV = COLOR_YUV2RGB_YUY2,COLOR_YUV2BGR_YUNV = COLOR_YUV2BGR_YUY2,COLOR_YUV2RGBA_YUY2 = 119,COLOR_YUV2BGRA_YUY2 = 120,COLOR_YUV2RGBA_YVYU = 121,COLOR_YUV2BGRA_YVYU = 122,COLOR_YUV2RGBA_YUYV = COLOR_YUV2RGBA_YUY2,COLOR_YUV2BGRA_YUYV = COLOR_YUV2BGRA_YUY2,COLOR_YUV2RGBA_YUNV = COLOR_YUV2RGBA_YUY2,COLOR_YUV2BGRA_YUNV = COLOR_YUV2BGRA_YUY2,COLOR_YUV2GRAY_UYVY = 123,COLOR_YUV2GRAY_YUY2 = 124,//CV_YUV2GRAY_VYUY    = CV_YUV2GRAY_UYVY,COLOR_YUV2GRAY_Y422 = COLOR_YUV2GRAY_UYVY,COLOR_YUV2GRAY_UYNV = COLOR_YUV2GRAY_UYVY,COLOR_YUV2GRAY_YVYU = COLOR_YUV2GRAY_YUY2,COLOR_YUV2GRAY_YUYV = COLOR_YUV2GRAY_YUY2,COLOR_YUV2GRAY_YUNV = COLOR_YUV2GRAY_YUY2,//! alpha premultiplicationCOLOR_RGBA2mRGBA    = 125,COLOR_mRGBA2RGBA    = 126,//! RGB to YUV 4:2:0 familyCOLOR_RGB2YUV_I420  = 127,COLOR_BGR2YUV_I420  = 128,COLOR_RGB2YUV_IYUV  = COLOR_RGB2YUV_I420,COLOR_BGR2YUV_IYUV  = COLOR_BGR2YUV_I420,COLOR_RGBA2YUV_I420 = 129,COLOR_BGRA2YUV_I420 = 130,COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420,COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420,COLOR_RGB2YUV_YV12  = 131,COLOR_BGR2YUV_YV12  = 132,COLOR_RGBA2YUV_YV12 = 133,COLOR_BGRA2YUV_YV12 = 134,//! DemosaicingCOLOR_BayerBG2BGR = 46,COLOR_BayerGB2BGR = 47,COLOR_BayerRG2BGR = 48,COLOR_BayerGR2BGR = 49,COLOR_BayerBG2RGB = COLOR_BayerRG2BGR,COLOR_BayerGB2RGB = COLOR_BayerGR2BGR,COLOR_BayerRG2RGB = COLOR_BayerBG2BGR,COLOR_BayerGR2RGB = COLOR_BayerGB2BGR,COLOR_BayerBG2GRAY = 86,COLOR_BayerGB2GRAY = 87,COLOR_BayerRG2GRAY = 88,COLOR_BayerGR2GRAY = 89,//! Demosaicing using Variable Number of GradientsCOLOR_BayerBG2BGR_VNG = 62,COLOR_BayerGB2BGR_VNG = 63,COLOR_BayerRG2BGR_VNG = 64,COLOR_BayerGR2BGR_VNG = 65,COLOR_BayerBG2RGB_VNG = COLOR_BayerRG2BGR_VNG,COLOR_BayerGB2RGB_VNG = COLOR_BayerGR2BGR_VNG,COLOR_BayerRG2RGB_VNG = COLOR_BayerBG2BGR_VNG,COLOR_BayerGR2RGB_VNG = COLOR_BayerGB2BGR_VNG,//! Edge-Aware DemosaicingCOLOR_BayerBG2BGR_EA  = 135,COLOR_BayerGB2BGR_EA  = 136,COLOR_BayerRG2BGR_EA  = 137,COLOR_BayerGR2BGR_EA  = 138,COLOR_BayerBG2RGB_EA  = COLOR_BayerRG2BGR_EA,COLOR_BayerGB2RGB_EA  = COLOR_BayerGR2BGR_EA,COLOR_BayerRG2RGB_EA  = COLOR_BayerBG2BGR_EA,COLOR_BayerGR2RGB_EA  = COLOR_BayerGB2BGR_EA,//! Demosaicing with alpha channelCOLOR_BayerBG2BGRA = 139,COLOR_BayerGB2BGRA = 140,COLOR_BayerRG2BGRA = 141,COLOR_BayerGR2BGRA = 142,COLOR_BayerBG2RGBA = COLOR_BayerRG2BGRA,COLOR_BayerGB2RGBA = COLOR_BayerGR2BGRA,COLOR_BayerRG2RGBA = COLOR_BayerBG2BGRA,COLOR_BayerGR2RGBA = COLOR_BayerGB2BGRA,COLOR_COLORCVT_MAX  = 143
};

我们使用不同的类型来看一下结果:

原图如下:

原图

代码如下:

 cvtColor(src, src1, COLOR_BGR2GRAY);imshow("src gray", src1);cvtColor(src, src1, COLOR_BGR2HSV);imshow("src hsv", src1);cvtColor(src, src1, COLOR_BGR2XYZ);imshow("src xyz", src1);

结果如下:

HSV

Gray

XYZ

其他的大家也可以尝试一下,看一下效果怎么样。

二、转换图像类型

1、图像类型引入

图像也分为很多种类型,我们之前也接触过,就是创建一个Mat类,其构造函数有的需要指定图像类型,我想大家应该还记得我们在讲Mat类型的时候,基本类型中有的需要指定图像类型:

    Mat(Size size, int type);    Mat(int rows, int cols, int type);

包括后面基于基本类型的构造函数,也需要类型。

图像类型的概念,我们之前也有接触过一些,比如三通道,单通道,灰度图像获取像素指针时候的,需要指定类型。

所以,图像生成之后,类型也就随之产生。

让我们走进常见图像类型,来深入了解一下吧!

2、常见图像类型

我们在interface.h文件中可以看到所有的类型:

#define CV_8U   0
#define CV_8S   1
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6
#define CV_16F  7#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)
#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))
#define CV_MAKE_TYPE CV_MAKETYPE#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))#define CV_16FC1 CV_MAKETYPE(CV_16F,1)
#define CV_16FC2 CV_MAKETYPE(CV_16F,2)
#define CV_16FC3 CV_MAKETYPE(CV_16F,3)
#define CV_16FC4 CV_MAKETYPE(CV_16F,4)
#define CV_16FC(n) CV_MAKETYPE(CV_16F,(n))
//! @}

对于下面的这些,我们发现它的构成是固定的:

CV_ + 数字 + U\S\F + C + 数字:

(1)第一个数字取值为8,16,32

(2)第二个数字取值为1,2,3,4

上面是我们的直观印象,其实它的定义如下:

CV_ + <bit_depth> + U\S\F + C + <number_of_channels>

其中:

CV_ :就是一个前缀,没有实际含义

<bit_depth> :位数,指的是图像像素的位数,如果一个像素占8位内存空间,这个位置上就是8

U\S\F :像素值类型,其中:U是指unsigned int,无符号整型;S是指signed int,有符号整型;F是指float,单精度浮点型。

C + <number_of_channels> :指定图像通道数,如果为1,是指单通道,又叫灰度图;如果是3,是指三通道,是我们常见的彩色图像;如果为4,指的是带Alpha通道的RGB彩色图像。

3、API——convertTo

在opencv中提供了API来转换图像类型:

inline
void GpuMat::convertTo(OutputArray dst, int rtype) const
{convertTo(dst, rtype, Stream::Null());
}inline
void GpuMat::convertTo(OutputArray dst, int rtype, double alpha, double beta) const
{convertTo(dst, rtype, alpha, beta, Stream::Null());
}inline
void GpuMat::convertTo(OutputArray dst, int rtype, double alpha, Stream& stream) const
{convertTo(dst, rtype, alpha, 0.0, stream);
}

这里面都调用了下面的函数:

    //! converts GpuMat to another datatype with scaling (Non-Blocking call)CV_WRAP void convertTo(OutputArray dst, int rtype, double alpha, double beta, Stream& stream) const;

一般来说,我们只考虑前两个参数,含义如下:

(1)OutputArray类型的dst,输出图像。

(2)int类型的rtype,图像转换类型。

举个例子:

src.convertTo(src2, CV_32FC1);

这个其实并不常用,重点还是第一个,所以我们要熟练掌握图像的颜色空间转换。

【opencv4.3.0教程】09之转换颜色空间(cvtColor)及类型(convertTo)相关推荐

  1. 【opencv4.3.0教程】05之基础结构2之矩形结构Rect_详解

    目录 一.前言 二.温故知新 1.基础结构都有啥 2.Point_ 3.Size_ 三.Rect_ 1.定义 1.构造函数 2.基本操作 3.成员变量 4.使用时的数据类型 2.常用方法 1.定义中的 ...

  2. 【opencv4.3.0教程】11之调整图像边缘(copyMakeBorder 与 borderInterpolate)

    目录 前言 一.调整边缘 1.调整的目的 2.调整的方式 1.BORDER_CONSTANT 2.BORDER_REPLICATE 3.BORDER_REFLECT 4.BORDER_WRAP 5.B ...

  3. 【opencv4.3.0教程】06之基础结构3之Scalar_结构详解

    目录 一.前言 二.温故知新--Rect_ 1.定义与成员变量 2.构造函数 3.常用方法 三.Scalar_ 1.定义 1.构造函数 2.基本操作 3.使用时的数据类型 2.常用方法 1.加法及加赋 ...

  4. 【opencv4.3.0教程】08之图像掩膜(Mask)操作与执行时间

    目录 一.前言 二.温故知新--像素基本操作 1.获取像素指针 2.像素范围处理 3.读写像素 三.图像掩膜操作 1.怎么理解掩膜Mask 2.掩膜实现 3.API-filter2D 四.执行时间 一 ...

  5. 【opencv4.3.0教程】07之像素基本操作 1 获取像素指针及控制像素范围

    目录 一.前言 二.温故知新--基本数据类型 1.最基本之Mat类 2.四大天王之Point_.Size_.Rect_.Scalar_ 3.各大分堂主 三.像素及相关概念 1.像素 2.灰度图与彩图 ...

  6. 【opencv4.3.0教程】13之调整图像的亮度与对比度

    目录 前言 一.亮度与对比度 1.什么是亮度和对比度 2.亮度和对比度调整原理 3.亮度和对比度调整代码实现 4.API-convertScaleAbs 二.伽马校正 1.伽马校正引入 2.伽马校正原 ...

  7. tx2+opencv源码编译教程(tx2+opencv4.4.0+opencv_contrib-4.4.0)

    tx2+opencv源码编译教程(tx2+opencv4.4.0+opencv_contrib-4.4.0) 一.卸载TX2上已安装的opencv 打开终端,输入以下指令卸载已经安装的opencv: ...

  8. opencv4.4.0配置opencv_contrib4.4.0教程

    opencv4.4.0配置opencv_contrib4.4.0教程(保证opencv-contrib4.4.0安装成功) (一)下载安装opencv和opencv_contrib以及cmake下载 ...

  9. 安装 | OpenCV4.2.0 + VS2017安装教程

    /******************************************** 博主github:https://github.com/MichaelBeechan 博主CSDN:http ...

最新文章

  1. 虚拟服务器目录,服务器虚拟主机目录
  2. 网络推广外包专员浅析为什么说早在建站初期就要做好网络推广外包
  3. Vue Vuex todo举例
  4. Apache Nifi 实战:多表导入实现及填坑 GitChat连接
  5. 画流程图activiti流程图_干货!小白也能一天画100张高逼格流程图
  6. Hive设置参数-指定引擎-队列
  7. Java 算法 数字黑洞
  8. java : NoSuchMethodError: org.codehaus.jackson.JsonNode.asInt()
  9. cs寄存器 x86 特权模式_Windows操作系统管理进程和线程:内核模式和用户模式
  10. Python菜鸟入门:day07条件循环
  11. vim“用sudo写”技巧如何工作?
  12. util包的简单介绍
  13. inux下切换到root权限有以下几种方式
  14. amd显卡测试帧数显示软件,NVIDIA发布帧数显示及显卡基准测试应用FrameView
  15. 同济大学研究生 计算机 哪个校区,同济大学研究生院在哪个校区?宿舍条件好不好?有哪些招生专业目...
  16. GEO数据挖掘(学习笔记)
  17. 字节跳动 8 年,抖音、头条的技术能力开发者都可以用起来了!
  18. 解决Android Studio的ADB连接不到手机问题
  19. Flutter 解决App登录页面软键盘遮挡住登录按钮或顶起底部控件的问题
  20. 维度建模的基本概念及过程

热门文章

  1. 编译原理——自上而下语法分析
  2. 笔记本电脑键盘没坏却无法打字的情况
  3. 武汉第一职业教育中心计算机技能高考,武汉第一职业教育中心2021年招生简章...
  4. 服务网格在百度核心业务大规模落地实践
  5. JVM笔记十四:方法区
  6. AI+智能服务机器人应用基础【实践报告】
  7. 台州农商行计算机专业能力测试,银行/农商行笔试!刷题要刷到点子上,来这里专业老师给你出题...
  8. 计算机考试320034,联想一体机可以用作显示器吗?
  9. 想考阿里云acp证书,报哪个机构好?
  10. 生产者消费者模型 android