版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
EmguCV学习笔记目录 Vb.net
EmguCV学习笔记目录 C#
笔者的博客网址:VB.Net-CSDN博客
教程相关说明以及如何获得pdf教程和代码(博客上的教程内容会和pdf教程一致,教程中也会包含所有代码),请移步:EmguCV学习笔记
2.1 颜色空间和颜色http://blog.csdn.net/uruseibest
由于在图像讲解中会遇到颜色操作,这里有必要先简单学习颜色空间和颜色相关知识。
2.1.1 颜色空间
颜色空间,也称为色彩模型。彩色模型是坐标系统和子空间的阐述。位于系统的每种颜色都有单个点表示。我们直接理解为
通常情况下,我们所见的颜色都可以用红色(R)、绿色(G)、蓝色(B)三种颜色按照不同比例混合而成,也就是RGB颜色空间。Vb.Net开发时,经常使用的也是RGB颜色空间,图像通道按照R-G-B的顺序排列。
图2-1 红绿蓝三原色
EmguCV也提供了RGB颜色空间,但是在使用EmguCV开发时,常使用的是BGR颜色空间,即与RGB相反的通道顺序。除此之外,EmguCV还提供了Gray、YCC、Hsv等多个颜色空间。
BGR颜色空间,使用蓝、绿、红三个通道来描述颜色。在EmguCV中,使用Image(Of Bgr Byte)来表示使用BGR颜色空间的图像。当使用Mat类来载入彩色图片时(使用ImreadModes.Color),就是用的BGR颜色空间,此时Mat类的对象包含3个通道,分别对应了蓝、绿、红。
Gray颜色空间,即灰度颜色空间,这是只有亮度信息而没有颜色信息的颜色空间,该颜色空间只有一个通道,使用数值0-255来划分表示,0表示纯黑色,255表示纯白色,0-255间是不同的灰度级别。此外,二值图像(即只有黑色和白色)在EmguCV中也是用Gray颜色空间来表示,但是此时只包含两个数值:0和255,0表示纯黑色,255表示纯白色。开发时,使用Image(Of Gray, Byte)类表示灰度颜色空间的图像。当使用Mat类来载入灰度图片时(使用ImreadModes.Grayscale),此时Mat类的对象仅有1个通道。RGB转为Gray的一个简易计算公式:
Gray = R * 0.3 + G * 0.59 + B * 0.11
YCC颜色空间,即YCbCr,在此颜色空间中,Y为颜色的亮度,Cb和Cr分别是蓝色和红色的色度。在EmguCV中,可以使用Image(Of Ycc, Byte)类表示YCC颜色空间的图像。RGB转为YCC的计算公式:
Y=0.299R+0.578G+0.114B
Cb=(-0.1687R-0.3313G+0.500B)+128
Cr=(0.500R-0.4187G-0.0813B)+128
HSV颜色空间,是一种比RGB颜色空间更直观的颜色空间,它使用色调(Hue)、饱和度(Saturation)和明度(Value)三个参数来描述颜色。在EmguCV中,可以使用Image(Of Hsv, Byte)类表示HSV颜色空间的图像。RGB转为YCC的计算公式比较复杂,这里不介绍,感兴趣的朋友请自行上网搜索。
2.1.2 颜色
MCvScalar是一种表示颜色或像素值的结构体。它用于指定像素的颜色和透明度,可以用于图像处理中的各种操作,如绘制图形、填充颜色、设置阈值等。
MCvScalar结构体包含4个浮点型成员变量:Val0、Val1、Val2和Val3,分别对应B(蓝色)、G(绿色)、R(红色)和Alpha通道的值。MCvScalar可以用于表示像素的颜色或灰度值,同时也可以用于表示图像的通道值。可以通过以下方式创建一个MCvScalar对象:
Dim color As New MCvScalar(B, G, R, Alpha)
其中,B、G、R和Alpha分别表示像素的蓝色、绿色、红色和透明度值,取值范围为0到255。
例如,下面的代码定义了红色:
Dim color As New MCvScalar(0, 0, 255) '红色