图像相关的基础知识【RGB和RGBA】—附python代码实现

图像相关的基础知识【RGB和RGBA】—附python代码实现图像处理基础知识 了解 RGB 和 RGBA rgba

大家好,欢迎来到IT知识分享网。

1、图像基础知识

  • 知道像素、通道等概念
  • 掌握使用matplotlib加载图片方法

2、像素和通道的理解

# -*- coding: utf-8 -*- # @Author: CSDN@逐梦苍穹 # @Time: 2024/7/31 23:38 # 导入必要的库 import numpy as np import matplotlib.pyplot as plt from PIL import Image # 1. 图像基本理解 def test01(): # 创建一个200x200的全零数组(黑色图像) img = np.zeros([200, 200]) # 打印图像数据 print(img) # 显示图像,使用灰度颜色映射,值范围0到255 # plt.figure(figsize=(12, 6)) # TODO 同一图形窗口内创建多个子图的函数, 参数: 行数、列数、当前子图索引(从1开始) plt.subplot(1, 2, 1) plt.imshow(img, cmap='gray', vmin=0, vmax=255) # 创建一个255x255的全255数组(白色图像) img = np.full([255, 255], 255) # 打印图像数据 print(img) # 显示图像,使用灰度颜色映射,值范围0到255 plt.subplot(1, 2, 2) plt.imshow(img, cmap='gray', vmin=0, vmax=255) # 显示图像窗口 plt.show() # 2. 图像的通道 def test02(): # 读取彩色图像 # img = plt.imread('data/彩色图片.png') img = np.array(Image.open('data/彩色图片RGBA.png')) # 修改数据的维度,从(H, W, C)到(C, H, W) img = np.transpose(img, [2, 0, 1]) print(img.size) print(img.shape[0]) print(img) # 打印所有通道 forNumber = img.shape[0] for i in range(forNumber): channel = img[i] # 打印当前通道的数据 print(channel) if forNumber / 2 >= i: plt.subplot(2, 2, i + 1) plt.imshow(channel, cmap='gray') # 显示当前通道的图像 plt.subplot(2, 2, i + 1) plt.imshow(channel) # 自适应布局 plt.tight_layout() plt.show() # 修改透明度通道,设为0.05 img[3] = 1 print("-" * 50) print(img) # 将图像数据维度从(C, H, W)改回(H, W, C) img = np.transpose(img, [1, 2, 0]) # 显示修改后的图像 plt.imshow(img) # 显示图像窗口 plt.show() # 主函数入口 if __name__ == '__main__': # 调用test01函数 test01() # 调用test02函数 test02() 
  1. 创建一个 200×200 的全零数组(黑色图像)。
  2. 使用 plt.subplot(1, 2, 1) 创建一个 1 行 2 列的子图布局,并选择第一个子图。
  3. 显示黑色图像,使用灰度颜色映射。
  4. 创建一个 255×255 的全 255 数组(白色图像)。
  5. 使用 plt.subplot(1, 2, 2) 创建第二个子图。
  6. 显示白色图像,使用灰度颜色映射。
  7. 使用 plt.show() 显示图像窗口。

test02 函数:

  1. 使用 PIL.Image.open 读取 data/彩色图片RGBA.png 图像。
  2. 使用 np.transpose(img, [2, 0, 1]) 将图像数据维度从 (H, W, C) 转换为 (C, H, W)。
  3. 打印图像数据的大小和形状。
  4. 遍历每个通道,打印通道数据,并在 2 行 2 列的子图布局中显示每个通道。
  5. 使用 plt.tight_layout() 调整子图布局。
  6. 使用 plt.show() 显示通道图像。
  7. 修改 Alpha 通道为 0.05。
  8. 使用 np.transpose(img, [1, 2, 0]) 将图像数据维度从 (C, H, W) 转换回 (H, W, C)。
  9. 显示修改后的图像,使用 plt.show() 显示图像窗口。

下面补充几个重要的知识点!

3、RGB和RGBA

RGB和RGBA是两种常见的颜色模型,广泛应用于计算机图形学和图像处理领域。它们之间的主要区别在于是否包含透明度信息。

RGB (Red, Green, Blue)

RGB颜色模型由三种基本颜色组成:红色(Red)、绿色(Green)和蓝色(Blue)。每种颜色的强度通常用0到255之间的整数表示。在RGB模型中,通过不同强度的红、绿、蓝组合,可以表示出各种颜色。例如:

  • (255, 0, 0) 表示纯红色。
  • (0, 255, 0) 表示纯绿色。
  • (0, 0, 255) 表示纯蓝色。
  • (255, 255, 255) 表示白色。
  • (0, 0, 0) 表示黑色。

RGBA (Red, Green, Blue, Alpha)

RGBA颜色模型在RGB的基础上增加了一个Alpha通道,用于表示透明度。Alpha通道的值通常也是0到255之间的整数,0表示完全透明,255表示完全不透明。通过Alpha通道,可以在颜色的基础上控制其透明度,这对于图像的叠加和透明效果非常重要。例如:

  • (255, 0, 0, 128) 表示半透明的红色。
  • (0, 255, 0, 255) 表示完全不透明的绿色。
  • (0, 0, 255, 0) 表示完全透明的蓝色。

应用场景

  1. RGB 常用于需要精确控制颜色的场景,如计算机显示器、电视屏幕、数码相机等。
  2. RGBA 通常用于图形设计和图像处理,如PNG图像格式支持透明背景、Web设计中的图像叠加效果等。

4、H,W,C

②(C, H, W):代表图像的通道数(Channels),高度(Height),以及宽度(Width);
这种格式常用于深度学习框架中,因为这样可以更方便地批量处理数据;
例如:

为什么需要转换维度:
转换维度是为了适应不同库或算法的需求。
例如:

  • 在深度学习中,通常需要将图像数据转换为 (C, H, W) 格式以输入到神经网络中。
  • 在显示图像或保存图像时,通常需要将数据转换回 (H, W, C) 格式。

5、小结

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119226.html

(0)
上一篇 2025-11-07 07:20
下一篇 2025-11-07 07:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信