OpenCV---色彩空间(一)

颜色空间:用三种或者更多特征来指定颜色的方法,被称为颜色空间或者颜色模型

1.RGB(OpenCV中为BGR):

一幅图像由三个独立的图像平面或者通道构成:红、蓝、绿(以及可选项:透明度alpha通道)
每个值代表每个像素的每个分量的度量值,值越高对应于更亮的像素
对应于人眼的三种光锥细胞,所以被广泛使用
RGB色彩空间源于使用阴极射线管的彩色电视,
RGB分别代表三个基色(R-红色、G-绿色、B-蓝色),具体的色彩值由三个基色叠加而成。
在图像处理中,我们往往使用向量表示色彩的值,如(0,0,0)表示黑色、(255, 255, 255)表示白色。
其中,255表示色彩空间被量化成255个数,最高亮度值为255(255 = 2^8 - 1,即每个色彩通道用8位表示)。
在这个色彩空间中,有256*256*256种颜色。RGB色彩空间如下图所示(图片来自百度百科)。是一个包含Red、Green、Blue的三维空间。

2.HSV

推文:OpenCV 自学笔记21. RGB色彩空间和HSV色彩空间的理解

H:0-360在OpenCV中被规范为0-180,若是360超出255溢出,所有规划到180,,8位可以保存,是HSV3位保存一致,都是只占一个字节
S和V:在OpenCV中规范化为0-255(一个字节就可以表示)

HSV颜色空间输入面向色度的颜色坐标系统的一种。这种类型的颜色模型接近人类颜色感知的仿真模型。
HSV的三个通道表示色度(H给出的颜色光谱构成的一种度量),饱和度(S给出主波长中的纯光比例,这表明一种颜色距离相同亮度灰度的程度)和纯度(V给出相对于白色光照强度的亮度),对应于直觉上的色彩、明暗和色调。HSV广泛应用于色彩的比较。

OpenCV中的imshow()函数假设图像的颜色以RGB显示,因此其他显示均不正确。所以首先必须将其转换成RGB颜色空间

3.HLS:

HLS属于面向色度的颜色坐标系统中的一种,和之前的HSV类似
用来指定每个通道中的一种颜色的色度值、明暗值、饱和度值
与HSV不同的是HSL定义的一种纯颜色的亮度等于一种中等灰色的亮度
而HSV定义的一种纯颜色的亮度等于白色的亮度

4.YCrCb

该空间广泛用于视频和图像压缩,不能算作纯粹的色彩空间,它是RGB颜色空间的一种解码方式
Y通道表示亮度,而Cr和Cb表示红色差值(在RGB空间中R通道和Y的差值)和蓝色差值(在RGB空间中B通道和Y的差值)各自的色度分量。

5.灰度图

每个像素值只表示灰度信息这一单一信息
RGB[A]准换成灰度:Y=0.299*R+0.587*G+0.114*B
灰度转换为RGB[A]:R=Y,G=Y,B=Y,A=max(ChannelRange)

推文:【OpenCV】笔记(9)——色彩空间和颜色处理

6.YUV

推文:YUV格式分析

Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B

R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U

7.色彩空间api相互转换

import cv2 as cv

def color_space_conv(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #RGB转灰度图
    cv.imshow("gray",gray)
    hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)   #RGB转HSV
    cv.imshow("hsv",hsv)
    yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV)   #RGB转YUV
    cv.imshow("yuv",yuv)
    ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb)#RGB转YCrCb
    cv.imshow("ycrcb",ycrcb)
    hls = cv.cvtColor(image,cv.COLOR_BGR2HLS)   #RGB转HLS
    cv.imshow("hls",hls)

src = cv.imread("./1.png")  #读取图片
cv.namedWindow("RGB",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("RGB",src)    #通过名字将图像和窗口联系
t1 = cv.getTickCount()  #获取时间,用于精度计时,操作系统启动所经过(elapsed)的毫秒数
color_space_conv(src)
t2 = cv.getTickCount()
print((t2-t1)/cv.getTickFrequency())    #getTickFrequency()是获取一秒钟结果的点数,获取秒数
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

 

转载于:https://www.cnblogs.com/ssyfj/p/9260115.html

<think>好的,我现在需要回答用户关于如何使用OpenCV-Python实现图像色彩增强的问题。首先,用户提到了几个引用,包括颜色空间转换、伽马变换等。我应该结合这些引用中的方法,给出几种有效的色彩增强方法。 首先,颜色空间转换,比如从BGR转到HSV,然后在HSV空间调整饱和度和亮度,这可以增强色彩。根据引用[2],用户已经用HSV来提取花瓣颜色,但调整饱和度和亮度可能也是可行的。比如增加饱和度可以让颜色更鲜艳。 其次,伽马变换,引用[3]中的例子是处理灰度图像,但同样适用于彩色图像。伽马值小于1会让图像变亮,大于1会变暗,调整这个可以改善整体亮度和对比度,间接影响色彩表现。 然后,直方图均衡化,虽然通常用于增强对比度,但如果在HSV或LAB空间中对亮度通道进行处理,可以避免颜色失真,同时提升整体视觉效果。比如在HSV中对V通道做均衡化,然后合并回原图像。 另外,白平衡调整也是种方法,比如灰度世界算法,通过调整各通道的均值来平衡颜色,消除色偏,让色彩更自然。 我需要确保每种方法都有代码示例,并且代码正确,符合OpenCV的使用方式。同时,要检查是否需要安装库,但用户已经给出安装方法,可以不用重复。注意引用对应的参考文献,比如HSV转换引用[2],伽马变换引用[3]。 可能需要分步骤说明每个方法,先介绍原理,再给代码,并解释参数的作用。例如,HSV调整时,如何拆分通道,如何调整饱和度,再合并回去。伽马变换如何处理每个通道,或者直接处理整个图像。 还要注意代码的可运行性,比如导入正确的库,使用正确的函数名。比如在伽马变换的例子中,用户原来的代码是针对灰度图的,可以修改为处理彩色图像,或者说明如何处理每个通道。 最后,总结这些方法,指出可以根据具体情况选择合适的方法,或者组合使用。同时,生成相关问题,可能涉及其他颜色空间、参数调整的影响,或者与其他方法的比较。</think>以下是使用OpenCV-Python实现图像色彩增强的常用方法及代码示例: --- ### 、HSV颜色空间饱和度增强 通过调整HSV颜色空间的饱和度通道(S通道),可显著增强色彩鲜艳度。原理公式为: $$S' = S \times scale$$ 其中$scale > 1$时增强饱和度。 ```python import cv2 import numpy as np img = cv2.imread('input.jpg') hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) h, s, v = cv2.split(hsv) # 增强饱和度(scale建议1.5-2.5) s = cv2.multiply(s, 1.5) s = np.clip(s, 0, 255) # 限制数值范围 enhanced_hsv = cv2.merge([h, s, v]) result = cv2.cvtColor(enhanced_hsv, cv2.COLOR_HSV2BGR) cv2.imwrite('enhanced.jpg', result) ``` [^2] --- ### 二、伽马变换增强对比度 通过调整伽马值改变像素值分布,增强色彩对比度: $$O = \left( \frac{I}{255} \right)^{\gamma} \times 255$$ ```python def gamma_correction(img, gamma=1.0): inv_gamma = 1.0 / gamma table = np.array([((i / 255.0) ** inv_gamma) * 255 for i in np.arange(0, 256)]).astype("uint8") return cv2.LUT(img, table) img = cv2.imread('input.jpg') enhanced = gamma_correction(img, gamma=0.6) # gamma<1提亮 cv2.imshow('Result', enhanced) cv2.waitKey(0) ``` [^3] --- ### 三、LAB颜色空间亮度均衡化 在LAB颜色空间中对亮度通道(L通道)进行直方图均衡化: ```python img = cv2.imread('input.jpg') lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) l, a, b = cv2.split(lab) # 对亮度通道做CLAHE均衡化 clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8)) l = clahe.apply(l) enhanced_lab = cv2.merge([l, a, b]) result = cv2.cvtColor(enhanced_lab, cv2.COLOR_LAB2BGR) cv2.imshow('Enhanced', result) ``` --- ### 四、白平衡调整(灰度世界算法) 通过平衡RGB通道均值消除色偏: ```python img = cv2.imread('input.jpg') avg_b = np.mean(img[:,:,0]) avg_g = np.mean(img[:,:,1]) avg_r = np.mean(img[:,:,2]) avg = (avg_b + avg_g + avg_r) / 3 # 计算各通道增益系数 scale_b = avg / avg_b scale_g = avg / avg_g scale_r = avg / avg_r enhanced = img.copy() enhanced[:,:,0] = np.clip(img[:,:,0] * scale_b, 0, 255) enhanced[:,:,1] = np.clip(img[:,:,1] * scale_g, 0, 255) enhanced[:,:,2] = np.clip(img[:,:,2] * scale_r, 0, 255) ``` --- ### 方法选择建议 | 方法 | 适用场景 | 优势 | |-------|---------|------| | HSV饱和度增强 | 需要提高色彩鲜艳度 | 直接控制色彩强度 | | 伽马变换 | 改善整体明暗对比 | 参数调节简单 | | LAB均衡化 | 改善光照不均匀 | 保留颜色信息 | | 白平衡 | 消除色偏 | 使色彩更自然 | --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值