图像处理hsv通道

2017-11-20 13:36:33 wl1070325332 阅读数 3931
  • 色彩空间-01

    学完本课程,可以牢固掌握人工智能计算机视觉的基础知识与常见算法,对图像处理、图像分析可以理解与应用 掌握python opencv框架编程与相关算法原理与函数使用,可以完成基础的图像处理与图像分析项目任务 为进一步...

    409人学习 贾志刚
    免费试看

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。

H:  0 — 180

S:  0 — 255

V:  0 — 255

此处把部分红色归为紫色范围:






目前在计算机视觉领域存在着较多类型的颜色空间(color space)。HSL和HSV是两种最常见的圆柱坐标表示的颜色模型,它重新影射了RGB模型,从而能够视觉上比RGB模型更具有视觉直观性。

HSV颜色空间 
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于 角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。 饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个 模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。 在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和 色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时 加入不同比例的白色,黑色即可获得各种不同的色调。 

 

HSI颜色空间 
HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。HSI色彩空间可以用一个圆锥空间模型来描述。用这种 描述HIS色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。 通常把色调和饱和度通称为色度,用来表示颜色的类别与深浅程度。由于人的视觉对亮度的敏感 程度远强于对颜色浓淡的敏感程度,为了便于色彩处理和识别,人的视觉系统经常采用HSI色彩空间, 它比RGB色彩空间更符合人的视觉特性。在图像处理和计算机视觉中大量算法都可在HSI色彩空间中 方便地使用,它们可以分开处理而且是相互独立的。因此,在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着 转换关系。

HSI 色彩模型是从人的视觉系统出发,用 H 代表色相 (Hue)、S 代表饱和度 (Saturation) 和 I 代表亮度 (Intensity) 来描述色彩。饱和度与颜色的白光光量刚好成反比,它可以说是一个颜色鲜明与否的指标。因此如果我们在显示器上使用 HIS 模型来处理图像,将能得到较为逼真的效果。 
色相 (Hue):指物体传导或反射的波长。更常见的是以颜色如红色,橘色或绿色来辨识,取 0 到 360 度的数值来衡量。 
饱和度 (Saturation):又称色度,是指色彩的强度或纯度。饱和度代表灰色与色调的比例,并以 0% (灰色) 到 100% (完全饱和) 来衡量。 
亮度 (Intensity):是指颜色的相对明暗度,通常以 0% (黑色) 到 100% (白色) 的百分比来衡量。


HSL代表色调(Hue),饱和度(Saturation)和亮度(Lightness),通常也称为HLS。HSV代表色调,饱和度和值(Value)。注意HSL 和HSV的两个H的含义是相同的,而饱和度的定义是不同的,虽然都叫饱和度,从后面的定义可以看出二者的不同。
HSL 和 HSV 二者都把颜色描述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“色调”或“明度”。 HSV 以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”。HSL 颜色空间类似于 HSV,在某些方面甚至比它还好。HSL的模型为双圆锥形状。
这两种表示在用目的上类似,但在方法上有区别。二者在数学上都是圆柱,但 HSV(色相,饱和度,明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL 在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。HSV 模型在 1978 年由埃尔维?雷?史密斯创立。下图给出了HSL和HSV的圆柱模型。


在圆锥上,角度代表色调H,饱和度S表示为点到中心竖线的距离,而亮度或者值V用中心竖线表示。红色的角度为0度,依次为黄色、绿色、青色、蓝色、橙色。连续两种颜色的角度相差60度。

2016-05-11 17:35:10 wcl0617 阅读数 2064
  • 色彩空间-01

    学完本课程,可以牢固掌握人工智能计算机视觉的基础知识与常见算法,对图像处理、图像分析可以理解与应用 掌握python opencv框架编程与相关算法原理与函数使用,可以完成基础的图像处理与图像分析项目任务 为进一步...

    409人学习 贾志刚
    免费试看

HSV格式的图片的各通道取值范围
H:0-360
S:0-1
V:0-1
然而在Opencv中的8Bit取值最大只能到255(32Bit的没事),所以在转换时,被除了2,范围变成了0-180.
而S和V通道则为0-255.

以下会以标准的HSV来说,用到Opencv里转化下就好。

HSV中的H通道时保存的色调,从0-360依次为红,橙,黄,绿,青,蓝,紫。但是分布不是均匀的。
看看自己需要检测什么颜色,从下图选取并测得角度范围即可
这里写图片描述

S通道:当S<0.1时可以算为灰度图像,>0.65时亮度较高。
V通道:当V<0.15是视觉上算是黑色,>0.9时视觉上算是白色。

2018-01-08 20:36:14 akadiao 阅读数 6229
  • 色彩空间-01

    学完本课程,可以牢固掌握人工智能计算机视觉的基础知识与常见算法,对图像处理、图像分析可以理解与应用 掌握python opencv框架编程与相关算法原理与函数使用,可以完成基础的图像处理与图像分析项目任务 为进一步...

    409人学习 贾志刚
    免费试看

mixChannels()函数用于将输入数组的指定通道复制到输出数组的指定通道。

mixChannels()参数说明:

void mixChannels(
const Mat* src, //输入数组或向量矩阵,所有矩阵的大小和深度必须相同。
size_t nsrcs, //矩阵的数量
Mat* dst, //输出数组或矩阵向量,大小和
深度必须与src[0]相同
size_t ndsts,//矩阵的数量
const int* fromTo,//指定被复制通道与要复制到的位置组成的索引对
size_t npairs //fromTo中索引对的数目
);

示例一:4通道图像分割

1、将一个4通道BGRA图像分割成一个3通道BGR和一个单独的alpha通道图像:
其中,索引对from_to[] = { 0, 2, 1, 1, 2, 0, 3, 3 }的含义为:
bgra的0通道复制到out[]的2通道,即bgr的0通道;
bgra的1通道复制到out[]的1通道,即bgr的1通道;
bgra的2通道复制到out[]的0通道,即bgr的2通道;
bgra的3通道复制到out[]的3通道,即alpha通道;
如图所示:
这里写图片描述
因此原图的青色(255,255,0)通过指定通道复制到输出图像中变成了黄色(0,255,255)。

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat bgra( 500, 500, CV_8UC4, Scalar(255,255,0,255) );
    Mat bgr( bgra.rows, bgra.cols, CV_8UC3 );
    Mat alpha( bgra.rows, bgra.cols, CV_8UC1 );

    Mat out[] = { bgr, alpha };

    int from_to[] = { 0, 2, 1, 1, 2, 0, 3, 3 };
    mixChannels( &bgra, 1, out, 2, from_to, 4 );

    imshow("bgra", bgra);
    imshow("bgr", bgr);
    waitKey(0);
    return 0;
}

这里写图片描述这里写图片描述

示例二:HSV通道获取

在HSV颜色空间中:
色相 (Hue):代表色彩。取 0 到 360 度的数值来衡量(红-黄-绿-青-蓝-洋红)。
饱和度 (Saturation):又称色度,指色彩的深浅,饱和度代表灰色与色调的比例,并以 0% (灰色) 到 100% (完全饱和) 来衡量;S = 0时只有灰度。
色调 (Value):色彩的明亮程度。V=1。它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。

利用mixChannels()函数通过复制指定通道可以看到HSV颜色空间下的三个通道的具体情况。

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat src, hsv, dst;
    src = imread("E:/image/image/shape.jpg");
    if (src.empty())
    {
        printf("can not load image \n");
        return -1;
    }
    namedWindow("input", WINDOW_AUTOSIZE);  
    imshow("input", src);
    cvtColor(src, hsv, COLOR_BGR2HSV);  
    dst.create(hsv.size(), hsv.depth());
    //分离Hue/色相通道
    int ch[] = {0, 0};
    mixChannels(&hsv, 1, &dst, 1, ch, 1);
    imshow("H channel", dst);
    //分离Saturation/饱和度通道
    int ch1[] = {1, 0};
    mixChannels(&hsv, 1, &dst, 1, ch1, 1);
    imshow("S channel", dst);
    //分离Value/色调通道
    int ch2[] = {2, 0};
    mixChannels(&hsv, 1, &dst, 1, ch2, 1);
    imshow("V channel", dst);

    waitKey(0);
    return 0;
}

这里写图片描述这里写图片描述这里写图片描述这里写图片描述

2019-05-07 13:49:21 zsc201825 阅读数 645
  • 色彩空间-01

    学完本课程,可以牢固掌握人工智能计算机视觉的基础知识与常见算法,对图像处理、图像分析可以理解与应用 掌握python opencv框架编程与相关算法原理与函数使用,可以完成基础的图像处理与图像分析项目任务 为进一步...

    409人学习 贾志刚
    免费试看

一 疑问

最近在做相关图片通道从RGB转到HSV时一直存在疑问?在网上找的计算公式都是说:
色调H:0°~360°;
饱和度S:0.0~1.0;
亮度V:0.0~1.0。
但计算公式中:V=max(R,G,B),那V的范围应该是0~255才对啊,怎么会是0-1呢?
另外,OpenCV给出的范围分别如下,怎么和计算公式的范围又不一样呢?
H: 0 — 180
S: 0 — 255
V: 0 — 255
下面就来一一解答上面两个疑问

二 解答

疑问一:V的范围到底是0~255,还是0-1呢?

国内网站上很多博主给出的计算公式其实是不全的,如果你查查OpenCV的官网就会发现,标准计算公式中一开始是把RGB三通道进行了归一化,也就是将R、G、B的值分别归一化到0–1的范围,正确的计算公式如下:
在这里插入图片描述
所以V的取值范围是0–1

疑问二:OpenCV给出的范围为什么和计算公式不一样?

其实,计算公式的后面已经给出了答案,OpenCV中图片存储的深度是8位整数的,0-255之间,所以对计算公式的结果又进行了变换,使HSV的范围在0~255之间。为什么H通道的0-180呢?因为计算公式中H的范围已经在0-360了,所以直接除以了2,使范围缩小在0-180之间就行了。

三 Python代码实现RGB转HSV

from cv2 import cv2
import numpy as np
img0 = cv2.imread('2.jpg')
hsv_img = cv2.cvtColor(img0, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv_img) #这是OpenCV给出的范围

'''转换为计算公式给出的范围'''
H = h.astype(np.float)*2
S = s.astype(np.float)/255
V = v.astype(np.float)/255
2015-09-22 23:56:20 qq_22033759 阅读数 6886
  • 色彩空间-01

    学完本课程,可以牢固掌握人工智能计算机视觉的基础知识与常见算法,对图像处理、图像分析可以理解与应用 掌握python opencv框架编程与相关算法原理与函数使用,可以完成基础的图像处理与图像分析项目任务 为进一步...

    409人学习 贾志刚
    免费试看

HSV格式的图片的各通道取值范围
H:0-360
S:0-1
V:0-1
然而在Opencv中的8Bit取值最大只能到255(32Bit的没事),所以在转换时,被除了2,范围变成了0-180.
而S和V通道则为0-255.

以下会以标准的HSV来说,用到Opencv里转化下就好。

HSV中的H通道时保存的色调,从0-360依次为红,橙,黄,绿,青,蓝,紫。但是分布不是均匀的。
看看自己需要检测什么颜色,从下图选取并测得角度范围即可
这里写图片描述

S通道:当S<0.1时可以算为灰度图像,>0.65时亮度较高。
V通道:当V<0.15是视觉上算是黑色,>0.9时视觉上算是白色。