彩色空间变换

一、简介

​ 一般图像是有红(R)、绿(G)、蓝(B)三个通道,每个通道由(0-255)不同的值组成,这就构成了多彩的图像,这称为图像的颜色空间。在图像处理中,还有另外的颜色空间(如HSV,HIS),这些更具有可分离性和可操作性。所以很多的图像算法需要将图像从RGB转换为其他空间。

二、RGB与灰度空间互转

​ RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。这里先将RGB空间与灰度空间互转。
常见的转换公式如下

算法名称 转换公式
最大值灰度处理 gray=max(R,G,B)gray=max(R,G,B)gray=max(R,G,B)
浮点灰度处理 gray=0.3R+0.59G+0.11Bgray=0.3R+0.59G+0.11Bgray=0.3R+0.59G+0.11B
整数灰度处理 gray=(30R+59G+11B)/100gray=(30R+59G+11B)/100gray=(30R+59G+11B)/100
移位灰度处理 gray=(28R+151G+77B)>>8gray=(28R+151G+77B)>>8gray=(28R+151G+77B)>>8
平均灰度处理 gray=(R,G,B)/3gray=(R,G,B)/3gray=(R,G,B)/3
加权平均灰度处理 gray=0.299R+0.5877G+0.144Bgray=0.299R+0.5877G+0.144Bgray=0.299R+0.5877G+0.144B

灰度化的主旨就是将三通道的色彩转换为一通道的。最常见的是加权平均灰度处理。

得知公式之后,可以直接使用算法将每个像素点的彩色值转换为灰度值。在opencv中有可以直接将RGB图像转换为灰度图像的算法,如下:

#opencv自带方法
img_GRAY = cv2.cvtColor(img_RGB, cv2.COLOR_BGR2GRAY)#使用numpy转换灰度空间,使用加权平均灰度
height,width,channle = img_GRAY.shape
grayimg = np.zeros((height, width, 3), np.uint8)
#图像加权平均灰度处理方法
for i in range(height):for j in range(width):#灰度加权平均法gray = 0.30 * img[i,j][0] + 0.59 * img[i,j][1] + 0.11 * img[i,j][2]grayimg[i,j] = np.uint8(gray)

原始图:
效果图:

三、RGB转HSV

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

这个模型就是按色彩、深浅、明暗来描述的。

H是色彩

S是深浅, S = 0时,只有灰度

V是明暗,表示色彩的明亮程度。

RGB到HSV的转换公式:
V=max(R,G,B)S={V−min(R,G,B)VifV≠00otherwiseH={60(G−B)/(V−min(R,G,B))ifV=R120+60(B−R)/(V−min(R,G,B))ifV=G240+60(R−G)/(V−min(R,G,B))ifV=BV = max(R,G,B)\\ S = \begin{cases} \frac{V-min(R,G,B)} {V} &if&V\not=0\\ 0& otherwise \end{cases}\\ H = \begin{cases} 60(G-B)/(V-min(R,G,B))&if&V=R\\ 120+60(B-R)/(V-min(R,G,B))&if &V=G\\ 240+60(R-G)/(V-min(R,G,B))&if &V=B \end{cases} V=max(R,G,B)S={VV−min(R,G,B)​0​ifotherwise​V​=0H=⎩⎪⎨⎪⎧​60(G−B)/(V−min(R,G,B))120+60(B−R)/(V−min(R,G,B))240+60(R−G)/(V−min(R,G,B))​ififif​V=RV=GV=B​
opencv中提供了RGB转HSV的方法,只需要将原图像传入,输出的即为HSV空间的图像。

img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)

原图:
效果图:

在实验过程中发现,opencv直接读取的图片格式为BGR排列的,当转换为RGB时,色彩发生变化,但是使用两种不同的格式生成的HSV空间的图像,结果是一样的。代码如下:

 img_BGR = cv2.imread("img.jpg")cv2.imshow("img_BGR",img_BGR)# 先将图片转换为RGB格式img_RGB = cv2.cvtColor(img_BGR,cv2.COLOR_BGR2RGB)cv2.imshow("img_RGB",img_RGB)# 使用rgb转换hsvimg_RGB2HSV = cv2.cvtColor(img_BGR,cv2.COLOR_BGR2HSV)cv2.imshow("img_RGB2HSV",img_RGB2HSV)# 使用bgr转化hsvimg_BGR2HSV = cv2.cvtColor(img_BGR,cv2.COLOR_BGR2HSV)cv2.imshow("img_BGR2HSV",img_BGR2HSV)

四、HSV转RGB

如上可以知道如何从RGB空间转换为HSV空间了,下边继续记录从HSV空间转换到RGB空间。

当给定一个HSV中的一个值(h,s,v),转换公式如下公式如下

展示的RGB值的范围是0.0到1.0

RGB HSV
(1,0,0) (0°,1,1)
(0.5,1,0.5) (120°,0.5,1)
(0,0,0.5) (240°,1,0.5)
img_RGB = cv2.cvtColor(img_HSV,cv2.COLOR_HSV2RGB)

hsv图像与上边结果相同,得到的rgb图像如下:

得到的结果是RGB排列的,如果想要还原到原来的样式,还需要进行RGB2BGR操作。

【图像处理】色彩空间变换相关推荐

  1. python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...

    一.色彩空间的转换 代码如下: #色彩空间转换 import cv2 as cv def color_space_demo(img): gray = cv.cvtColor(img, cv.COLOR ...

  2. 数字图像处理—亮度变换与空间滤波—亮度变换函数

    数字图像处理-亮度变换与空间滤波-亮度变换函数 参考资料:<数字图像处理>,仅供学习参考. 亮度变换函数仅取决于亮度的值,与像素位置无关,所以亮度变换函数通常可写成如下形式: s=T(r) ...

  3. hough变换连接边缘matlab,matlab图像处理hough变换程序执行问题

    matlab图像处理hough变换程序执行问题0 pxkd82013.04.23浏览184次分享举报 程序如下: I= imread('D:\MATLAB7\fenkuai.bmp','bmp');% ...

  4. hsv空间阈值检测matlab,基于HSV色彩空间变换的阴影检测算法——MATLAB实现

    图像在不同的色彩空间可以表现出不同的光谱特性,从而适用于不同的应用场合.在 HSV 色彩空间中,阴影在色度和饱和度通道中都与非阴影区域有明显的区别.根据阴影的这种特性,利用连续两次的 HSV 彩色空间 ...

  5. Skimage图像处理教程2)色彩空间变换

    最为大家熟悉的色彩空间就是rgb色彩空间和灰度色彩空间了,除此之外HSV,YCbCr也都各有应用.这里我们就简单的介绍一下色彩空间变化,这就涉及到python中skimag.color的应用 首先sk ...

  6. 图像处理---HSV变换

    1.HSV颜色系统简介 HSV 即使用色相(Hue).饱和度(Saturation).明度(Value)来表示色彩的一种方式,是一种在人们生活中常用的颜色系统,因为它符合人们描述颜色的方式--是什么颜 ...

  7. QT实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配

    From: http://www.cnblogs.com/qytan36/archive/2010/04/04/1704226.html 实验环境: 1,Linux操作系统 2,QT3编程开发环境 3 ...

  8. 边缘指示函数matlab,matlab图像处理——傅立叶变换边缘提取

    第一部分 图像的傅立叶变换 一. 实验目的 1.了解图像变换的意义和手段: 2. 熟悉傅里叶变换的基本性质: 3. 熟练掌握FFT的方法及应用: 4. 通过实验了解二维频谱的分布特点: 5. 通过本实 ...

  9. 车道线检测---色彩空间变换

    前几天,刚接触这个车道线检测的项目,给了一堆程序,由于刚接触很多东西都不懂,现将自己的学习过程记录下来,以便之后再利用.所遇到的第一个问题即是在车道线检测的过程中,对图像的处理,由于RGB色彩空间对于 ...

最新文章

  1. Windows各版本以及漏洞
  2. 通过 Feature Level 动态控制 SAP Spartacus 的页面显示
  3. IXMLDOMDocument中的load方法返回值有BUG
  4. JavaScript基础5——关于ECMAscript的函数
  5. Shell判断参数是否为数字的6种方法(是否为整形)
  6. mysql noinstall 5.5_安装配置MYSQL5.5
  7. 使用Stack进行递归
  8. 小米电视双十一大降价:55寸仅1399元
  9. 【数据结构和算法】哈希表详解
  10. wps安装Mathtype插件遇到的问题
  11. AGTF30 涡扇发动机说明
  12. mysql分库分表中间件6_数据性能改善——分库分表中间件
  13. java通过LocalDateTime获取上周几
  14. android load so 权限,android so动态加载遇到的坑
  15. 盐城范围内野外钓鱼好去处(不是塘钓哟)
  16. 苹果CMS电影站新手搭建教程
  17. 多语种互译批量中英文翻译插件
  18. linux新手入门及安装全攻略(转载)
  19. Laravel repository数据仓库使用 Star.hou红楼一梦
  20. 百度安全《2016网站安全报告》:近七成恶意网页是博彩和色情网站

热门文章

  1. 销售需求丨借贷记账法(补充)
  2. 6to4 自动隧道技术
  3. MATLAB的用途与使用方法,matlab shiftdim函数作用用法与shiftdim()移动维度
  4. ZooKeeper : Curator框架之Leader选举LeaderLatch
  5. 一个适合新手练习的单片机+安卓小项目(三)
  6. Chrome代理管理器插件
  7. 大卸八块看真相 拆解5款行车记录仪
  8. webplayer中截屏
  9. letcode帕斯卡三角形
  10. 五横五纵快速交通系统提速大连经济