机器视觉——图像初处理

发布时间:2023年12月29日

1、彩色空间

????????彩色图像的颜色空间也称为颜色模型或彩色系统,我们都知道,人眼看到的色彩图像都是光的反射形成的。在图像处理中,图像需要通过不同的颜色模型展现。常用的颜色空间有RGB、YCrCb、HSV、GRAY等。

1.1 RGB颜色空间

????????人眼中有大量对红、绿、蓝3种颤色敏感的锥状体细胞,因此,我们常用红色(Red, R)、绿色(Green,G)、蓝色(Blue,B)组成的RGB颜色空间表达彩色图像的信息。面向硬件设备的RGB颜色空间主要用于电视机、计算机等电子系统感知、表示和显示图像。
????????RGB颜色空间基于三维直角坐标系,包括R、G、B3个原始光谱分量,如图2-1所示。RGB颜色空间中的R、G、B3个分量的值分别描述了红色、绿色、蓝色的亮度值。为了方便描述,我们将3个分量都进行归一化处理,使得三元组中的每个数值均表示红色、绿色、蓝色三者的比例。在图2-1中,原点(0,0,0)代表黑色,点(1,1,1)代表白色,点(1,0,0)代表红色(R),点(0,1,0)代表绿色(G),点(0,0,1)代表蓝色(B)。

????????RGB 图像由3个图像分量组成,分别是R通道图像、G通道图像和B通道。OpenCV默认的图像格式为BGR,即三个维度为B蓝色、G绿色、R红色。

import cv2
lena=cv2.imread("lena.jpg")
cv2.imshow('before',lena)
#调用通道分离
b,g,r=cv2.split(lena)
#三通道分别显示
cv2.imshow('blue',b)
cv2.imshow('green',g)
cv2.imshow('red',r)
cv2.waitKey(0)
cv2.destroyAllWindows()

【运行结果】

? ? ?? ? ?

【结果分析】三个通道的图像相当于单独的二值图,没有颜色空间显示,所以都显示为灰色图像。

1.2 gray色彩空间

????????GRAY(灰度图像)通常指8位灰度图,具有256个灰度级,像素值的范围是[0,255]。当图像由RGB色彩空间转换为GRAY色彩空间时,其灰度值的计算公式如下:

I=0.299R+0.587G+0.114B

????????当图像由GRAY色彩空间转换为RGB色彩空间时,一般的处理方式,是RGB通道的值都等于灰度值。

????????OpenCV?提供cv2.cvtColor()函数用于彩色空间转换。语法格式:

 dst=cv2.cvtColor(src, code [,dstCn])

【参数说明】

  • dst表示输出图像,与原始输入图像具有同样的数据类型和深度。
  • src表示原始输入图像。
  • code是色彩空间转换码,常用的值有cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2RGB, cv2.COLOR_GRAY2BGR等。
  • dstCn 是目标图像的通道数。如果参数为默认的0,则通道数自动通过原始输入图像和code得到。
import cv2
lena=cv2.imread("lena.jpg")
gray=cv2.cvtColor(lena,cv2.COLOR_BGR2GRAY)
#==========打印 shape=
print ("lena.shape=",lena.shape)
print ("gray.shape=",gray.shape)
#==========显示效果=

【运行结果】

1.3 HSV颜色空间

???????HSV色彩空间从心理学和视觉的角度出发,指出人眼的色彩知觉主要包含三要素:色调(Hue,也称为色相)、饱和度(Saturation)、亮度(Value) 我们将物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。因此,通过调整色调值就能选取不同的颜色,色调的取值区间为[0,360]。饱和度为一比例值,范围是[0,1],具体为所选颜色的纯度值和该颜色最大纯度值之间的比值。饱和度的值为0时,只有灰度。亮度表示色彩的明亮程度,取值范围也是[0,1]

????????从RGB色彩空间转换到HSV色彩空间时,先将RGB色彩空间的值归一化到[0,1]之间,然后再进行计算:

计算结果可能存在H小于0的情况,如果H小于0,则调整为 H=H+360。

1.3.1HSV和HSI区别

????????HSV (色相hue, 饱和度saturation, 明度value), 也称HSB。(B指brightness) 是艺术家们常用的,因为与加法减法混色的术语相比,使用色相,饱和度等概念描述色彩更自然直观。HSV是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。

HSL (色相hue, 饱和度saturation, 亮度lightness/luminance),也称HLS 或 HSI (I指intensity) 与
HSV非常相似,仅用亮度(lightness)替代了明度(brightness)。

二者区别在于,一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度。

????????cv2.cvtColor()函数中使用cv2.COLOR_BGR2HSV转换码可将图像从BGR色彩空间转换为HSV色彩空间,示例代码如下:

import cv2
lena=cv2.imread("lena.jpg")
cv2.imshow('BGR',lena)	        			#显示图像
img2=cv2.cvtColor(lena,cv2.COLOR_BGR2HSV) 		#转换色彩空间为HSV
cv2.imshow('HSV',img2)  	        			#显示图像
cv2.waitKey(0)

【运行结果】

1.4?YCrCb色彩空间

????????在YCrCb色彩空间中,Y代表光源的亮度,色度信息保存在Cr和Cb中,其中,Cr表示红色分量信息,Cb表示蓝色分量信息。亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。在RGB光源中,绿色分量的影响最大,蓝色分量的影响最小。对8位图像,从RGB色彩空间到YCrCb色彩空间的转换公式为:

Y=0.299*R+0.587*G+0.114*B

Cr=(R-Y)*0.713+128

Cb=(B-Y)*0.564+128

从YCrCb色彩空间到RGB色彩空间的转换公式为:

R=Y+1.403*(Cr-128)

G=Y-0.714*(Cr-128)-0.344*(Cb-128)

B=Y+1.773*(Cb-128)

????????cv2.cvtColor()函数中使用cv2.COLOR_BGR2YCrCb转换码可将图像从BGR色彩空间转换为YCrCb色彩空间,示例代码如下:

import cv2
lena=cv2.imread("lena.jpg") 				#读取图像
cv2.imshow('BGR',lena)  	        			#显示图像
img2=cv2.cvtColor(lena,cv2.COLOR_BGR2YCrCb) 		#转换色彩空间为YCrCb
cv2.imshow('YCrCb',img2)  	        			#显示图像
cv2.waitKey(0)

【运行结果】?

文章来源:https://blog.csdn.net/qq_41566819/article/details/135284114
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。