《数字图像处理-OpenCV/Python》连载(16)图像的颜色空间转换

发布时间:2023年12月17日

《数字图像处理-OpenCV/Python》连载(16)图像的颜色空间转换


本书京东优惠购书链接:https://item.jd.com/14098452.html
本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html

在这里插入图片描述


第3章 图像的颜色空间转换

我们在日常生活中遇到的图像通常是彩色图像。在数字图像处理中,针对不同的需求,彩色图像有多种不同的表示、存储和处理方式。


本章内容概要

  • 介绍常用的颜色空间,学习彩色图像的转换和处理方法。
  • 通过调节色彩平衡,理解图像的亮度、饱和度与对比度。
  • 介绍伪彩色图像,学习将灰度图像、多模态数据扩展为彩色图像的方法。

3.1 图像的颜色空间转换


3.1.1 图像的颜色空间

颜色空间是指通过多个颜色分量构成坐标系来表示各种颜色的模型系统。

彩色图像可以根据需要映射到某个颜色空间进行描述。在不同的工业环境或机器视觉应用中,使用的颜色空间各不相同。

RGB模型是一种加性色彩系统,源于红、绿、蓝三基色,应用于阴极射线管(CRT)显示器、数字扫描仪、数字摄像机和显示设备上,是应用最广泛的彩色模型之一。此外,数字媒体艺术通常采用HSV颜色空间,机器视觉和图像处理则大量使用HSI、HSL颜色空间。


3.1.2  图像的颜色空间转换

函数cv.cvtColor用于将图像从一个颜色空间转换到另一个颜色空间。

函数原型

cv.cvtColor(src, code [, dst, dstCn]) → dst

函数cv.cvtColor可以转换彩色图像的颜色通道顺序,将彩色图像转换为灰度图像或将图像在RGB空间与其他颜色空间相互转换。

参数说明

  • src:输入图像,是多维Numpy数组,数据类型为CV_8U、CV_16U或CV_32F。
  • code:颜色空间转换代码,详见官方文档中的ColorConversionCodes。
    • COLOR_BGR2RGB:将BGR通道顺序转换为RGB。
    • COLOR_BGR2GRAY:将BGR彩色图像转换为灰度图像。
    • COLOR_BGR2HSV:将BGR图像转换为HSV图像。
  • dst:输出图像,大小和深度与src相同。
  • dstCn:输出图像的通道数,默认值为0,表示自动计算。

注意问题
(1) OpenCV使用RGB模型表示彩色图像时使用的是BGR格式,按B/G/R顺序存储为多维数组。而PIL、PyQt、Matplotlib等库使用的是RGB格式。
(2) 灰度图像是单通道图像,在OpenCV和Matplotlib中都是二维Numpy数组。
(3) 图像中像素值的取值范围,由像素的位深度 depth决定。常用的图像和视频格式是8位无符号整数(CV_8U),取值范围为0~255。
(4) 图像格式转换通常是线性变换的,像素的位深度不会影响变换结果;但在进行非线性计算或变换时,需要把输入图像归一化到适当的取值范围才能得到正确结果。例如,CV_8U由于数据精度较低,可能会丢失部分信息,使用CV_16U或CV_32F就可以解决这个问题。
(5) 将图像由灰度图像转换为RGB图像时,转换规则为:R=G=B=gray。
(6) 函数cv.cvtColor能提供150多种转换类型,通过以下程序可以查询。

print([i for i in dir(cv) if i.startswith(‘COLOR_’)])


【例程0301】图像的颜色空间转换

本例程包含了几种常用的图像颜色空间转换。


# 【0301】图像的颜色空间转换
import cv2 as cv
from matplotlib import pyplot as plt

if __name__ == '__main__':
    # 读取原始图像
    imgBGR = cv.imread("../images/Lena.tif", flags=1)  # 读取为彩色图像

    imgRGB = cv.cvtColor(imgBGR, cv.COLOR_BGR2RGB)  # BGR 彩色图像转换为 RGB图像
    imgGRAY = cv.cvtColor(imgBGR, cv.COLOR_BGR2GRAY)  # BGR 彩色图像转灰度图像
    imgHSV = cv.cvtColor(imgBGR, cv.COLOR_BGR2HSV)  # BGR 彩色图像转 HSV 图像
    imgYCrCb = cv.cvtColor(imgBGR, cv.COLOR_BGR2YCrCb)  # BGR 彩色图像转 YCrCb图像
    imgHLS = cv.cvtColor(imgBGR, cv.COLOR_BGR2HLS)  # BGR 彩色图像转 HLS 图像
    imgXYZ = cv.cvtColor(imgBGR, cv.COLOR_BGR2XYZ)  # BGR 彩色图像转 XYZ 图像
    imgLAB = cv.cvtColor(imgBGR, cv.COLOR_BGR2LAB)  # BGR 彩色图像转 LAB 图像
    imgYUV = cv.cvtColor(imgBGR, cv.COLOR_BGR2YUV)  # BGR 彩色图像转 YUV 图像

    # 调用Matplotlib显示处理结果
    titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV']
    images = [imgBGR, imgRGB, imgGRAY, imgHSV, imgYCrCb,
              imgHLS, imgXYZ, imgLAB, imgYUV]
    plt.figure(figsize=(10, 8))
    for i in range(9):
        plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray')
        plt.title("{}. {}".format(i+1, titles[i]))
        plt.xticks([]), plt.yticks([])
    plt.tight_layout()
    plt.show()

运行结果:
使用Matplotlib显示不同颜色空间的图像如图3-1所示。注意例程的图像显示并非不同颜色空间的真实色彩效果,只是图像进行颜色空间转换后得到的Numpy矩阵用Matplotlib按RGB格式显示的结果。

在这里插入图片描述

图3-1 使用Matplotlib显示不同颜色空间的图像


本书京东优惠购书链接:https://item.jd.com/14098452.html


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/133693135)
Copyright 2023 youcans, XUPT
Crated:2023-10-10

欢迎关注本书CSDN独家连载专栏
《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html

文章来源:https://blog.csdn.net/youcans/article/details/133693135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。