opencv-19 图像色彩空间转换函数cv2.cvtColor()

这篇具有很好参考价值的文章主要介绍了opencv-19 图像色彩空间转换函数cv2.cvtColor()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在
Python 中,你可以使用这个函数来实现不同色彩空间之间的转换。

函数的基本语法为:

cv2.cvtColor(src, code[, dst[, dstCn]])

参数说明:

  • src:输入图像,可以是 NumPy 数组或 OpenCV 中的 Mat 对象。

  • code:颜色空间转换代码,表示目标色彩空间。可以使用 OpenCV 中的 cv2.COLOR_* 常量来指定,
    如 cv2.COLOR_BGR2GRAY 表示将 BGR 彩色图像转换为灰度图像。

  • dst:可选参数,输出图像,可以是 NumPy 数组或 Mat 对象。如果未提供,将会创建一个新的图像来保存转换后的结果。
    dstCn:可选参数,目标图像的通道数。默认值为 0,表示与输入图像通道数保持一致。

枚举值表:

opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉
opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉

opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉
opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉

opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉
opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉
opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉
opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉
这里需要注意,BGR 色彩空间与传统的 RGB 色彩空间不同。对于一个标准的 24 位位图,
BGR 色彩空间中第 1 个 8 位(第 1 个字节)存储的是蓝色组成信息(Blue component),第 2
个 8 位(第 2 个字节)存储的是绿色组成信息(Green component),第 3 个 8 位(第 3 个字节)
存储的是红色组成信息(Red component)。同样,其第 4 个、第 5 个、第 6 个字节分别存储蓝色、绿色、红色组成信息,以此类推。
颜色空间的转换都用到了如下约定:
 8 位图像值的范围是[0,255]。
 16 位图像值的范围是[0,65 535]。
 浮点数图像值的范围是[0.0~1.0]。

对于线性转换来说,这些取值范围是无关紧要的。但是对于非线性转换来说,输入的 RGB图像必须归一化到其对应的取值范围内,才能获取正确的转换结果。

例如,对于 8 位图,其能够表示的灰度级有 28=256 个,也就是说,在 8 位图中,最多能表示 256 个状态,通常是[0,255]之间的值。但是,在很多色彩空间中,值的范围并不恰好在[0,255]
范围内,这时,就需要将该值映射到[0,255]内。

例如,在 HSV 或 HLS 色彩空间中,色调值通常在[0,360)范围内,在 8 位图中转换到上述色彩空间后,色调值要除以 2,让其值范围变为[0,180),以满足存储范围,即让值的分布位于8 位图能够表示的范围[0,255]内。

又例如,在 CIELab*色彩空间中,a 通道和 b 通道的值范围
是[−127,127],为了使其适应[0,255]的范围,每个值都要加上 127。
不过需要注意,由于计算过程存在四舍五入,所以转换过程并不是精准可逆的。
下面使用像素数组来观察转换效果

import cv2
import numpy as np
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(img[1,0,0],img[1,0,1],img[1,0,2])

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])

结果如下:

img=
 [[[ 25  17 215]
  [157  31  16]
  [ 62  30  87]
  [ 95 210 182]]

 [[115 165 251]
  [116  21  65]
  [116  55 246]
  [150  78  61]]]
rst=
 [[ 77  41  51 189]
 [185  45 119  81]]
115
165
251
像素点(1,0)直接计算得到的值= 185.01399999999998
像素点(1,0)使用公式 cv2.cvtColor()转换值= 185

像素点(1,0)直接计算得到的值= 185.01399999999998
像素点(1,0)使用公式 cv2.cvtColor()转换值= 185

OpenCV 中,灰度图像是按照行列直接存储的。而 BGR 模式的图像会依次将它的 B 通道、G 通道、R 通道中的像素点,以行为单位按照顺序存储在 ndarray 的列中。例如,有大小
为 R 行×C 列的 BGR 图像,其存储方式如图 4-2 所示。
当图像由 RGB 色彩空间转换到 GRAY 色彩空间时,其处理方式如下:

Gray = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · B

在本例中,各个像素点的像素值如下:

  • 原始图像 BGR 图像内第 1 行第 0 列上的 B 通道像素点的值为 img[1,0,0]=115。
  • 原始图像 BGR 图像内第 1 行第 0 列上的 G 通道像素点的值为 img[1,0,1]=165。
  • 原始图像 BGR 图像内第 1 行第 0 列上的 R 通道像素点的值为 img[1,0,2]=251

opencv-19 图像色彩空间转换函数cv2.cvtColor(),opencv,opencv,人工智能,计算机视觉

计算结果为 185.0139。目标图像是灰度图像,是 8 位图像,值是位于[0,255]之间的无符号整数。所以,要将上述小数结果进行四舍五入,得到 185,并将它作为目标灰度图像内 rst[1,0]的像素值。文章来源地址https://www.toymoban.com/news/detail-606818.html

到了这里,关于opencv-19 图像色彩空间转换函数cv2.cvtColor()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C++实战Opencv第二天——色彩空间转换函数和opencv中图像对象创建与赋值(从零开始,保姆教学)

    OpenCV是一个强大的计算机视觉库,使用C++作为主要编程语言,对于图像处理和计算机视觉领域具有重要意义。其提供了丰富的功能和算法,使得开发者能够快速实现各种图像处理和计算机视觉应用。OpenCV C++为图像处理和计算机视觉领域的开发者提供了一个高效、稳定的工具。

    2024年02月20日
    浏览(42)
  • 【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解

    在OpenCV图像加法cv2.add函数详解详细介绍了图像的加法运算。 除了这种加法外,OpenCV还提供了带权重的加法,即两副图像的像素通道值相加时各自按一定的权重比例取值来相加。 假设有2个图像矩阵src1和src2,在两个图像融合时,各自的权重分别为alpha和beta,则二者融合后的目

    2024年02月15日
    浏览(93)
  • opencv-26 图像几何变换04- 重映射-函数 cv2.remap()

    重映射(Remapping)是图像处理中的一种操作,用于将图像中的像素从一个位置映射到另一个位置。重映射可以实现图像的平移、旋转、缩放和透视变换等效果。它是一种基于像素级的图像变换技术,可以通过定义映射关系来改变图像的几何形状和外观。 在重映射中,我们需要

    2024年02月15日
    浏览(52)
  • 关于opencv中cv2.imread函数读取的图像shape问题

    图像坐标系是(w,h),w为x轴,h为y轴,(x,y) 但opencv读出来的数组却正好相反,是(h,w,3),(y,x,3) 所以这里会有一个转换 实则转换为图像坐标系时,要转置一下,或者image.shape[::-1] 切片操作 [start,endstep],其中:- start: 表示开始的下标,如果省略默认为 0 - end: 表示结束的下标(不包含

    2024年02月12日
    浏览(40)
  • opencv cv2.imread()报错: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor‘

    问题: pycharm中使用opencv , 执行cv2.imread(filepath)读取图片时报错: cv2.error: OpenCV(4.7.0) D:aopencv-pythonopencv-pythonopencvmodulesimgprocsrccolor.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ 解决方案: 尝试以下几种方法: 1.查图片路径中是否有中文,尽量不要含中

    2024年02月13日
    浏览(59)
  • cv2.error: OpenCV(4.6.0) (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor‘

    OpenCV(4.6.0) imread 读取空 问题解决方法小记 详情如下: 解决方案 1. 安装imageio模块 2. 代码修改 材料参考 cv2.imread获取图片为空 2022-11-03关于cv2.imread()读取图片返回None的原因及解决办法

    2024年03月13日
    浏览(79)
  • 详解cv2.addWeighted函数【使用 OpenCV 添加(混合)两个图像-Python版本】

    有的时候我们需要将两张图片在alpha通道进行混合,比如深度学习数据集增强方式MixUp。OpenCV的 addWeighted 提供了相关操作,此篇博客将详细介绍这个函数,并给出代码示例。🚀🚀 o u t p u t I m g = s a t u r a t e ( α ∗ i n p u t I m g 1 + β ∗ i n p u t I m g 2 + γ ) rm outputImg=saturate( al

    2024年02月06日
    浏览(97)
  • 【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印

    在OpenCV中,调用cv2.putText()函数可添加文字到指定位置,对于需要在图片中加入文字的场景提供了一种比较直接方便的方式。 注意:OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号) 其函数原型如下所示: 上述参数分别

    2024年02月04日
    浏览(63)
  • opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

    Hu 矩(Hu Moments)是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征,具有平移、旋转和尺度不变性,适用于图像识别、匹配和形状分析等任务。 Ming-Kuei Hu在其论文中提出了七个用于形状描述的独特

    2024年02月13日
    浏览(66)
  • 【Python】cv2.error: OpenCV(4.8.0) :-1: error: (-5:Bad argument) in function ‘cvtColor‘ > Overload res

    代码片段为: 我的代码出现了报错: 错误信息提示 cv2.error: (-5:Bad argument) in function ‘cvtColor’,这是因为在将图像从原始路径加载并转换为灰度图时,传递给 cv2.cvtColor 的参数不正确。 修改代码: 主要更改包括: 将图片路径作为参数传递给 cv2.imread 函数,以正确加载图片。

    2024年02月10日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包