openCV 图像色彩空间转换

void QuickDemo::colorSpce_Demo(cv::Mat &image)
{
  cv::Mat gray, hsv;

  cvtColor(image, hsv, COLOR_BGR2HSV);
  cvtColor(image, gray, COLOR_RGB2GRAY);

  imshow("hsv", hsv);
  imshow("gray", gray);

  imwrite("./hsv.png",hsv);
  imwrite("./gray.png", gray);
}

一、cvColor

cvtColor函数是OpenCV库中的一个函数,用于图像颜色空间的转换。它可以将一个图像从一个颜色空间转换为另一个颜色空间,比如将彩色图像转换为灰度图像、将BGR图像转换为HSV图像等

cv::cvtColor(src, dst, code, dstCn);
  • src:输入图像,可以是一个三通道的彩色图像或者一个单通道的灰度图像。

  • dst:输出图像,转换后的图像将存储在这里。

  • code:颜色空间转换代码,指定要进行的转换类型。具体的转换类型可以通过 cv::ColorConversionCodes 枚举类中的常量来指定。常见的转换类型包括:
    cv::COLOR_BGR2GRAY:BGR彩色图像到灰度图像的转换。
    cv::COLOR_BGR2HSV:BGR彩色图像到HSV彩色图像的转换。
    cv::COLOR_BGR2RGB:BGR彩色图像到RGB彩色图像的转换。
    cv::COLOR_GRAY2BGR:灰度图像到BGR彩色图像的转换。

  • dstCn:输出图像的通道数,如果为0,则根据 code 参数自动确定通道数。

注意事项:

  • 输入图像和输出图像应该具有相同的尺寸
  • 如果输入图像是彩色图像,而输出图像是灰度图像,则输出图像只有一个通道
  • 如果输入图像是灰度图像,而输出图像是彩色图像,则输出图像的通道数由 dstCn 参数指定

二、HSV/BGR

HSV(Hue-Saturation-Value)和BGR(Blue-Green-Red)是两种常用的颜色表示方式,用于描述彩色图像中的像素颜色。

BGR颜色空间是计算机图形学中最常用的颜色空间之一。在BGR颜色空间中,每个像素由三个分量表示:蓝色(Blue)、绿色(Green)和红色(Red)。对于8位BGR图像,每个分量的取值范围是0到255,其中0表示最小强度或没有该颜色,255表示最大强度或完全饱和的颜色。

相比之下,HSV颜色空间将颜色表示为更直观和易于理解的方式。它包含以下三个主要分量:

  • 色调(Hue):表示颜色的类型或种类。在HSV圆柱体中,色调沿着圆周方向变化,从0到360度。常见的色调表示如下:
    红色位于0度或360度
    黄色位于60度
    绿色位于120度
    青色位于180度
    蓝色位于240度
    洋红色位于300度

  • 饱和度(Saturation):表示颜色的鲜艳程度或纯度。较高的饱和度表示颜色更鲜艳,而较低的饱和度表示颜色更接近灰色。饱和度的取值范围通常是0到1,也可以是0到100。

  • 值(Value):表示颜色的亮度或明暗程度。较高的值表示颜色更亮,而较低的值表示颜色更暗。值的取值范围通常是0到1,也可以是0到100。

HSV颜色空间的转换可以通过OpenCV中的cvtColor函数来实现,使用的转换代码是cv::COLOR_BGR2HSV。

三、imwrite

imwrite函数是OpenCV库中用于将图像写入文件的函数。它可以将一个图像保存为指定格式的图像文件。

bool cv::imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>());

参数解释如下:

  • filename:要保存的图像文件的路径和名称。
  • img:要保存的图像,可以是 cv::Mat 类型的图像对象。
  • params:保存图像的参数,是一个可选的参数。它是一个包含键值对的整数向量,用于指定保存图像的特定参数。常用的参数包括:
    CV_IMWRITE_JPEG_QUALITY:JPEG格式图像的质量,取值范围为0到100,默认为95。
    CV_IMWRITE_PNG_COMPRESSION:PNG格式图像的压缩级别,取值范围为0到9,默认为3。
    CV_IMWRITE_WEBP_QUALITY:WebP格式图像的质量,取值范围为0到100,默认为80。

返回值为布尔类型,表示图像是否成功保存到文件中


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值