其实前面我已经说过OpenCV中关于RGBA的存储问题,但是为了强调,这里专门单独拿出来介绍一下。

在OpenCV中有分别有1通道图,2通道图,3通道图,4通道图。我们最常用的是3通道图,即RGB图,4通道图是在3通道图的基础上多了一个Alpha分量,用于表示透明这个特性。虽然我们一般说的时候都是RGBA的顺序,但其实在内存里面,图像的存储顺序是BGRA BGRA BGRA …。而我们知道在OpenCV里面使用CvScalar结构表示颜色,正好该结构包含4个双精度浮点型成员。用该结构表示颜色时,它的4个成员变量对应的颜色时B、G、R、A,即是颜色在内存里面存储的顺序,而不是我们通常说的颜色的顺序(RGBA)。所以,在设计颜色的函数调用中,我们就需要注意。比如,我们想设置蓝色,则应该是cvScalar(255, 0, 0),设置红色应该是cvScalar(0, 255, 0)。当然,为了满足人们平时的习惯,OpenCV里面有一个宏CV_RGB,其实是一个宏定义:

#define CV_RGB(r, g, b)	cvScalar((b), (g), (r), 0)

所以如果我们习惯了RGB的顺序,可以使用该宏来获得颜色,例如设置绿色:CV_RGB(0, 255, 0)。