OpenCV入门——色彩空间转换(1)

OpenCV中提供cvtColor()函数来进行色彩空间的转换。色彩空间种类较多,经常用到的有:RGB空间,HSI空间,Gray灰度空间,带alpha通道的RGB等等。需要注意的是OpenCV中所处理的RGB三通道的顺序为B,G,R。

  1. RGB转Gray

转换关系为Gray = B * 0.114 + G * 0.587 + R * 0.299

在前面说过,图像运算其本质上就是一个个的数组运算,用数组来测试cvtColor函数与转换公式之间的关系。需要注意的是在定义矩阵时,尺寸定义为[2,4,3]也就是三通道。在使用时对应位置的取值范围分别为0~1,0~3,0~2。img[1,0,0]表示第二个矩阵中第0行第0列;img[1,0,1]表示第二个矩阵中第0行第1列。演示如下

                                                                                                                                      

                                                                                                                            

 

Code:

img=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)

rst=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

print("img=\n",img)

print("rst=\n",rst)

print("像素点(1,0)直接计算得到的值=",

      img[1,0,0]*0.114+img[1,0,1]*0.587+img[1,0,2]*0.299)

print("像素点(1,0)使用公式cv2.cvtColor()转换值=",rst[1,0])

  1. Gray转RGB

Gray图是一维的,只包含一个通道,想转换成RGB空间只能是将单通道的数据复制到三个通道中去。下图两个矩阵,img是随机生成的矩阵,rst是将灰度转换成RGB空间中后的结果。

 

                                                                                                              

Code:

img=np.random.randint(0,256,size=[2,4],dtype=np.uint8)

rst=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

print("img=\n",img)

print("rst=\n",rst)

 

灰度和RGB空间相互转换的实例:

下面第一幅图是原来图,经过转换灰度后效果如标题Gray图所示。再通过Gray转换到RGB空间当中时,已经没有了原来的色彩,这是因为在RGB转换到灰度空间时信息已经丢失了。

                                                                                   

 

  1. BGR转RGB

OpenCV中提供cvtColor()函数用于RGB与BGR之间的转换。在矩阵当中就是将第一列和第三列互换了一下。转换代码及结果如下:

                                                                                                   

Code:

img=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)

rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

bgr=cv2.cvtColor(rgb,cv2.COLOR_RGB2BGR)

print("img=\n",img)

print("rgb=\n",rgb)

print("bgr=\n",bgr)

下图正常色彩使用的是BGR,在转换成RGB时原图像中蓝色系(头发)变成红色,红色系(背景)变成蓝色。这是因为OpenCV中通道顺序是B,G,R。使用RGB就是将红色通道的值都放到了蓝色通道当中,造成了颜色的互换。

                                                                                          

 

  1. RGB转HSV

HSV也可以写做HSI,仅仅是名称有所不同,所描述的色彩空间都是一样的。

其中H(Hue代表色调),S(Saturation代表饱和度),I(Intensity代表亮度)在遥感图像处理中,可以将I,换做其他相同区域经过几何校正的更高分辨率的灰度图像进行融合,在转换到RGB空间时可以在不损失其他信息的情况下,大幅提高分辨率。

下面的示例当中仅针对纯色蓝,绿,红进行RGB到HSV空间中的转换。OpenCV中的 H分量是 0~180, S分量是0~255, V分量是0~255,而实际上HSV颜色空间H范围0~360,S范围0~1,V范围0~1,所以在使用的时候还需要自己转换一下,H*2,V/255,S/255。

                                                                                 

Code:

以蓝色为例

#先给定一个纯蓝色

imgBlue[0,0,0]=255

Blue=imgBlue

BlueHSV=cv2.cvtColor(Blue,cv2.COLOR_BGR2HSV)

print("Blue=\n",Blue)

print("BlueHSV=\n",BlueHSV)

                                                                                                                                                                                                                              如果有什么疑问,欢迎在评论区或私信讨论呦(*^_^*)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值