opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

这篇具有很好参考价值的文章主要介绍了opencv+图像处理(Image Processing in OpenCV) 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():  
    # 读取图像  
    src = cv.imread("../imgs/opencv.png")  
    # 转换HSV空间  
    hsv = cv.cvtColor(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()

opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

5.常用的彩色空间

RGB

opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间
(出自图像工程第4版,张毓晋,清华大学出版社)

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

CMY

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

HSI

opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

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

为了更直观的感受HSI彩色模型对人类感官的适配,代码拆分了同一幅图的RGB分量和HSV分量。
opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间颜色越深则该分量值的占比越大。可以看出,HSI的三幅图看起来很不相同,表示,人眼能感觉到的HSI三个分量的区别要比RGB三个分量的区别要大

L*a*b*

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

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

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

  • RGB2Gray

opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

  • RGB2CIE XYZ
    opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

  • RGB2HSV
    opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

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():   
	src = cv.imread("../imgs/opencv.png")
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  
    cv.imshow("input", src)  
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)  
    cv.imwrite('gray.png', gray)  
    cv.imshow("gray", gray)  
    cv.waitKey(0)  
    cv.destroyAllWindows()  
if __name__ == "__main__":  
    main()

opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间

def main():  
    src = cv.imread("../imgs/opencv.png")  
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)  
    cv.imshow("input", src)  
  
    hsv = cv.cvtColor(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改变颜色空间文章来源地址https://www.toymoban.com/news/detail-438897.html

到了这里,关于opencv+图像处理(Image Processing in OpenCV) 4-0改变颜色空间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV图像处理-灰度处理

    灰度的线性变换将图像中的所有像素点的值按 线性变换函数 进行变换。 在曝光不足或过度的情况下,图像的灰度值会局限在一个很小的范围内,这时在显示器上看到的将是一个模糊不清、似乎没有层次的图像。 针对这一情况,使用一个线性单值函数对图像内的每一个像素做

    2024年02月08日
    浏览(106)
  • OpenCV实战(1)——OpenCV与图像处理基础

    OpenCV 是一个的跨平台计算机视觉库,包含了 500 多个用于图像和视频分析的高效算法。本节将介绍 OpenCV 的基础知识,以及如何编译运行 OpenCV 程序,并将学习如何完成最基本的图像处理任务——读取、显示和保存图像。除此之外,鼠标事件和图形绘制也是 OpenCV 计算机视觉项

    2024年02月05日
    浏览(47)
  • opencv 图像基础处理_灰度图像

    二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。例如,图 2-3 中的 lena 图像是一幅灰度图像, 它采用了更多的数值以体现不同的颜色,因此该图像的细节信息更丰富。 通常,计算机会将

    2024年02月15日
    浏览(57)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 一、简单介绍 二、简单图像倾斜校正处理效果实现原理 三、简单图像倾斜校正处理效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言。是一种面向对

    2024年04月13日
    浏览(68)
  • opencv-图像处理基础-二值图像

    1.二值图像 二值图像是指仅仅包含黑色和白色两种颜色的图像。 在计算机中,通过一个栅格状排列的数据集(矩阵)来表示和处理图像。例如,图 2-1 是 一个字母 A 的图像,计算机在处理该图像时,会首先将其划分为一个个的小方块,每一个小方 块就是一个独立的处理单位

    2024年02月15日
    浏览(56)
  • OpenCV图像处理-图像分割-MeanShift

    MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心,半径为sp,色彩幅值为sr进行不断地迭代。 语法:pyrMeanShiftFiltering(img, double sp, double sr,

    2024年02月16日
    浏览(45)
  • (3-1)OpenCV图像视觉处理:OpenCV基础

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。在本章的内容中,将详细讲解在P ython程序中使用 OpenCV 实现 图像视觉处理的 知识,为读者步入本书

    2024年02月21日
    浏览(58)
  • Opencv图像处理(全)

    🍕 专栏:Pytorch项目实战 🌭 Opencv 图像处理(全) 🍱 Opencv C++图像处理(全) 🍳 Pillow 图像处理(PIL.Image) 🍝 Pytorch基础(全) 🥙 Python常用内置函数(全) 🍰 卷积神经网络CNN的经典模型 🍟 卷积神经网络CNN的实战知识 🥘 三万字硬核详解:yolov1、yolov2、

    2024年02月04日
    浏览(50)
  • opencv-简单图像处理

    图像像素存储形式 对于只有黑白颜色的灰度图,为单通道,一个像素块对应矩阵中一个数字,数值为0到255, 其中0表示最暗(黑色) ,255表示最亮(白色) 对于采用RGB模式的彩色图片,为三通道图,Red、Green、Blue三原色,按不同比例相加,一个像素块对应矩阵中的一个向量

    2024年02月05日
    浏览(42)
  • OpenCV图像处理----图像的二值化

    图像二值化( Image Binarization) 就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。 二值化的原理 OpenCV提供的图像二值化API threshold()方法参数: 图片矩阵 阈值 图片中的最大值 二值化的方式 二值化的方式: THRESH_BINARY 高于阈值改为

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包