OpenCV用色调饱和度和亮度表示颜色

OpenCV用色调饱和度和亮度表示颜色,RGB是一种被广泛接受的色彩空间。虽然它被视为一种在电子成像系统中采集和显示颜色的有效方法,但它其实并不直观,也并不符合人类对于颜色的感知方式——我们更习惯用色彩、亮度或彩度(即表示该颜色是鲜艳的还是柔和的)来描述颜色。为了能让用户用更直观的属性描述颜色,我们引入了基于色调、饱和度和亮度的色彩空间。本文将把色调、饱和度和亮度作为描述颜色的方法,并对这些概念加以探讨。

如何实现

上文讲过,可用cv::cvtColor函数把BGR图像转换成另一种色彩空间。这里使用转换代码CV_BGR2HSV

        // 转换成HSV色彩空间
        cv::Mat hsv;
        cv::cvtColor(image, hsv, CV_BGR2HSV);

我们可以用代码CV_HSV2BGR把图像转换回BGR色彩空间。通过把图像的通道分割到三个独立的图像中,我们可以直观地看到每一种HSV组件,方法如下所示:

        // 把3 个通道分割进3 幅图像中
        std::vector<cv::Mat> channels;
        cv::split(hsv, channels);
        // channels[0]是色调
        // channels[1]是饱和度
        // channels[2]是亮度

注意第三个通道表示颜色值,即颜色亮度的近似值。因为处理的是8位图像,所以OpenCV会把通道值的范围重新调节为0~255(色调除外,它的范围被调节为0~180)。这个方法非常实用,因为我们可以把这几个通道作为灰度图像进行显示。

城堡图的亮度通道显示如下:
OpenCV用色调饱和度和亮度表示颜色

该图像的饱和度通道显示如下:
OpenCV用色调饱和度和亮度表示颜色

最后是该图像的色调通道:
OpenCV用色调饱和度和亮度表示颜色

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!