在我们读取图像时通常会用到imread()函数,里面flags可以决定通道数,来得到我们想要的图像,比如:
-1 按解码得到的方式读入图像;
0 单通道 灰度图;
1 三通道 彩色;
当我们想要其他类型的图像时,这种方法就有一些局限性了,所以我们有必要了解cvtColor 这是一种颜色空间转换函数。
先看源码:
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);
src 输入图像
dst 输出图像
code 代码颜色空间转换代码
dstCn 目标图像中的信道数; 如果该参数为0,则通道的数量自动从SRC和code派生。
可以支持RGB HSV 等颜色空间转换(建议不要使用人脸尝试,有些效果懂的都懂)
代码:
int main()
{
Mat img1, img2, img3, img4;
img1 = imread("猫1.jpg");
imshow("原图", img1);
cvtColor(img1, img2, COLOR_RGB2GRAY);
imshow("灰度图", img2);
cvtColor(img1, img3, COLOR_RGB2HSV);
imshow("HSV", img3);
cvtColor(img1, img4, COLOR_RGB2BGR);
imshow("BGR", img4);
waitKey(0);
}
效果图:



附:代码颜色空间转换代码
enum ColorConversionCodes {
COLOR_BGR2BGRA = 0, //!< add alpha channel to RGB or BGR image
COLOR_RGB2RGBA = COLOR_BGR2BGRA,
COLOR_BGRA2BGR = 1, //!< remove alpha channel from RGB or BGR image
COLOR_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,
COL

本文介绍如何使用cvtColor函数进行图像色彩空间转换,包括RGB到灰度图、HSV及BGR等转换方式,并提供了详细的代码示例。
最低0.47元/天 解锁文章
2711

被折叠的 条评论
为什么被折叠?



