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)。这个方法非常实用,因为我们可以把这几个通道作为灰度图像进行显示。
城堡图的亮度通道显示如下:
该图像的饱和度通道显示如下:
最后是该图像的色调通道:
酷客网相关文章:
评论前必须登录!
注册