我的编程空间,编程开发者的网络收藏夹
学习永远不晚

opencv+图像处理(ImageProcessinginOpenCV)4-0改变颜色空间的过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

opencv+图像处理(ImageProcessinginOpenCV)4-0改变颜色空间的过程

本专栏代码地址https://github.com/xiawei20161308104/xv_opencv_tutorials
本节代码路径xv_opencv_tutorials/ImageProcessinginOpenCV/changing_colorspaces.py
参考 图像工程第4版,张毓晋,清华大学出版社

0.本节涉及的opencv新函数

颜色空间转化函数 cv.cvtColor()

1.彩色的形成

“Indeed rays,properly expressed,are not colored”——牛顿。

光线为不同频率的电磁波,人的视觉能感受到光的刺激,并且将不同频率的电磁波感知为不同颜色,所以,彩色仅存在于人的眼睛和大脑中,物理世界分布的是带有不同辐射能量的光线。

2.彩色空间

彩色模型建立在彩色空间之上,彩色模型和彩色空间的概念不做分别。
根据原理可以分为4类,根据应用可以分为2类

根据原理模型原理举例
比色模型/色度模型基于对光谱反射的物理测量为颜色"id",颜色最精确的表达
生理学模型基于人类视网膜中存在的3种基本颜色感知锥细胞RGB
心理物理模型/精神物理学模型基于人类对颜色的感知HSI,HCV,L*a*b*
对立模型基于感知实验HSB
根据应用模型应用举例
面向硬设备显示器,打印机RGB,CMY,CMYK
面向视觉动画,图像处理HSI,HSB,L*a*b*

3.为什么需要选择合适的彩色空间

人对彩色的感知与刺激视网膜的电磁辐射的谱能量分布,人的神经心里学,人的生理行为等有关,感知彩色是一个很复杂的过程,应用也存在多样性。CIE定义了若干彩色模型,每个模型都只有特定的适用情况,
没有一种通用模型满足所有情况,由彩色原理和彩色应用等去选择合适的彩色模型能统一处理问题的维度。

4.如何选择合适的彩色空间

了解自己的需求并寻找对应特性的彩色空间。例如,RGB模型特别适合在图像采集输入和图像输出显示等场合应用,但与人类视觉感知有一定区别,就是当我们看到一幅图像的时候并不能感知到他的红绿蓝各有多少分量,这个时候HSV模型就比较适配,H代表色调,S代表饱和度,V代表强度,这样建立的模型与人的感知高度适配。
在HSV模式下分析图像,取到图像的V值,并减小100个像素到v1,对比观察,能发现,人眼就能明显感知到亮度的变化。

def main():  
    # 读取图像  
    class="lazy" data-src = cv.imread("../imgs/opencv.png")  
    # 转换HSV空间  
    hsv = cv.cvtColor(class="lazy" data-src, cv.COLOR_BGR2HSV)  
    # 分离通道  
    h, s, v = cv.split(hsv)  
    cv.namedWindow("v", cv.WINDOW_NORMAL)  
    cv.imshow("v", v)  
    # 减小亮度  
    v1 = v - 30  
    cv.namedWindow("v1", cv.WINDOW_NORMAL)  
    cv.imshow("v1", v1)  
  
    cv.waitKey(0)  
    cv.destroyAllWindows()

5.常用的彩色空间 RGB

(出自图像工程第4版,张毓晋,清华大学出版社)

  • 基于 人体锥细胞,为一种与人的视觉系统结构密切相连的模型
  • 视网膜中三种不同的感受彩色的锥细胞的波长响应曲线SML与三原色RGB基本对应
  • RGB模型的建立在笛卡尔坐标系统中
  • 原点为黑色,离原点最远的顶点为白色,这两点连线上为深浅不同的灰色

CMY

  • 三色光两两叠加产生三补色CMY,C为蓝绿(绿+蓝),M为品红(红+蓝),Y为黄(红+绿)
  • 一般用于出版社打印,图像处理不常用

HSI

  • HSI与人类感知相对应,被称为面向用户的彩色模型
  • 用色调(Hue)、色饱和度(Saturation)和亮度(Intensity)来描述色彩
  • 独立于显示设备
  • HSI的优点:
    • 强度分量与图像的彩色信息无关,是独立的, 也就是强度/亮度分量的变换并不改变图像的色调和饱和度。
    • H与S独立并且适配人的感官,使得HSI模型非常适合基于人的视觉系统对彩色感知特性进行处理分析的图像算法。
  • HSI的缺点:
    • 并不是均匀彩色空间模型——人所感觉到的两点的色彩区别程度与色彩空间两点的欧氏距离相对应。

为了更直观的感受HSI彩色模型对人类感官的适配,代码拆分了同一幅图的RGB分量和HSV分量。

颜色越深则该分量值的占比越大。可以看出,HSI的三幅图看起来很不相同,表示,人眼能感觉到的HSI三个分量的区别要比RGB三个分量的区别要大

L*a*b*

  • 从人的直观感受来看,彩色模型对彩色的描述应该与人对彩色的感知越同步越好,L\*a\*b\*是一个均匀彩色空间,即,人所感觉到的两点的色彩区别程度与此空间中两点的欧氏距离相对应
  • 也是一个面向人类视觉的彩色空间,与设备无关,适合接近自然光照明的应用场合

6.变换彩色空间数学公式

每个工具包工具定义的分量范围不同,像色调H可以是0-180也可以是0-360,在数学上,可以互相转换。所以opencv在处理时,对于8位和16位图像,R、 G 和 B 被转换为浮点格式,并按比例缩放归一化到0-1。
部分转换公式如下:

  • RGB2Gray

  • RGB2CIE XYZ

  • RGB2HSV

7.opencv变换彩色空间代码+注释+效果

opencv的cvtColor函数实现色彩空间的转换,提供了150种颜色空间的转换方式,只需要在cvtColor函数的flag位填写对应的转换标识即可。转换标识获取如下。

import cv2 as cv  
flags = [i for i in dir(cv) if i.startswith('COLOR_')]  
#这里会输出150种flag,他们是opencv定义的彩色空间转换flag,是cv.cvtColor(input_image, flag)的第二个参数值。
print( flags )

可以自己通过上面的代码获取,或者直接查询官方文档

这里介绍两种转换代码和效果案例,分别是BGR2GrayBGR2HSV(opencv中没提供HSI,但这两个彩色空间差不多

#BGR2Gray
import cv2 as cv  
def main():   
	class="lazy" data-src = cv.imread("../imgs/opencv.png")
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  
    cv.imshow("input", class="lazy" data-src)  
    gray = cv.cvtColor(class="lazy" data-src, cv.COLOR_BGR2GRAY)  
    cv.imwrite('gray.png', gray)  
    cv.imshow("gray", gray)  
    cv.waitKey(0)  
    cv.destroyAllWindows()  
if __name__ == "__main__":  
    main()

def main():  
    class="lazy" data-src = cv.imread("../imgs/opencv.png")  
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  
    cv.imshow("input", class="lazy" data-src)  
  
    hsv = cv.cvtColor(class="lazy" data-src, cv.COLOR_BGR2HSV)  
    cv.imwrite('hsv.png', hsv)  
    cv.imshow("hsv", hsv)  
    # 分离通道  
    h, s, v = cv.split(hsv)  
    cv.namedWindow("h", cv.WINDOW_NORMAL)  
    cv.imshow("h", h)  
    cv.namedWindow("s", cv.WINDOW_NORMAL)  
    cv.imshow("s", s)  
    cv.namedWindow("v", cv.WINDOW_NORMAL)  
    cv.imshow("v", v)  
  
    cv.waitKey(0)  
    cv.destroyAllWindows()  

if __name__ == "__main__":  
    main()

到此这篇关于opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间的文章就介绍到这了,更多相关opencv图像处理改变颜色空间内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

opencv+图像处理(ImageProcessinginOpenCV)4-0改变颜色空间的过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

opencv+图像处理(ImageProcessinginOpenCV)4-0改变颜色空间的过程

这篇文章主要介绍了opencv+图像处理(ImageProcessinginOpenCV)4-0改变颜色空间,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录