【原创】HSV和YCrCb色彩空间介绍

通常

情况下,彩色图像使用R、G、B三个通道表示,这种通过三基色可以到其它的各种颜色,但是具体是哪种颜色,我们就无从可知,如果我想知道(R,G,B)三元组具体什么颜色呢?这时候可以用HSV颜色空间表示。

HSV颜色空间

HSV都是一种将RGB色彩模型中的点在原著坐标体系中的表示法。这中表示法试图做到比基于笛卡尔坐标系的几何结构RGB更加直观。HSV即色相(Hue),饱和度(Saturation),明亮度(Lightness),又称为HSB,其中B即英语Brightness。

  • 色相(H)是色彩的基本属性,就是平常所说的颜色,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。
  • 饱和度(S)是指色彩的纯度,越高色彩越纯,越低则逐渐变灰,取0-100%的数值。
  • 明度(V),取0-100%。

SV二者都把颜色描述在圆柱坐标系内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间的是灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的高度对应于“亮度”,“色调”或“明度”。

HSV在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心)。

【原创】HSV和YCrCb色彩空间介绍_第1张图片

上图中上半部分:3D模型截面。下半部分:将模型中三个参数的其中之一固定为常量,其它两个参数的图像。

注意:

  • 不同软件设定的HSV取值范围是不同的,openCV中色度是 [0,179], 饱和度是[0,255], 明亮度是[0,255]。
  • 在openCV中,HSV各种颜色的取值范围是这样定义的:

YCbCr颜色空间

YCbCr有的时候会被写作:YCBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成分。

上图中四部分依次是彩色图像的原图,彩色影像只有Y成分的图、只有Cb成分的图、和只有Cr成分的图。同时注意的是只有Y成分的图基本等同于彩色图像的灰度图。

如何获得图像的亮度?

方法一,将彩色度或转化为灰度图,这样每个像素值都是灰度值,也就是亮度值

方法二,将RGB三色图转化YCbCr彩色空间,第一通道(Y成分)就是亮度值

mport os
import numpy as np
import cv2
import sys

im_path = sys.argv[1]
im = cv2.imread(im_path)

if im is None:
	print im_path, " not exist"
	sys.exit()
h, w = im.shape[:2]
num = h*w
im_ycrcb = cv2.cvtColor(im, cv2.COLOR_BGR2YCR_CB)

ycrcb_bright = 1.0*np.sum(im_ycrcb[:,:,0])/num
print 'YCrCb model Bright Value:', ycrcb_bright

im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
gray_bright = np.sum(im_gray)*1.0/num
print 'Gray model Bright Value:', gray_bright

im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
hsv_bright = np.sum(im_hsv[:,:,2])*1.0/num
print 'hsv model Bright Value:', hsv_bright

输出

YCrCb model Bright Value: 124.199016571
Gray model Bright Value: 124.199016571
hsv model Bright Value: 179.870040894

可见HSV空间的明亮度值,和我们说的亮度值是有差异的。

你可能感兴趣的:(Python,opencv,HSV,YCbCr,图像亮度)