这些像素中的每一个都表示为数值,而这些数字称为像素值。这些像素值表示像素的强度。对于灰度或黑白图像,我们的像素值范围是0到255。
接近零的较小数字表示较深的阴影,而接近255的较大数字表示较浅或白色的阴影。
因此,计算机中的每个图像都以这种形式保存,其中你具有一个数字矩阵,该矩阵也称为Channel。
特别的,灰度图像的通道数为1——为单通道图像,即灰度图像的形状为 (Height, Width)

我们知道几乎所有颜色都可以从三种原色:红色,绿色和蓝色 生成。
彩色图像实际上就是由三张“灰度图像”组成的。每个通道都表示为一个数字矩阵,分别表示图像在红色、绿色和蓝色三个通道上的灰度。
在 RGB模型 中,每个像素的颜色都由这三种基本颜色组合而成。因此,一个图像在二维平面上看似只有一个像素,实际是由三个不同颜色(不同通道)的像素混合组成。
这里的 R/G/B 三种颜色,就认为是彩色图片的三个通道,如下图所示。

最后,所有这些通道或所有这些矩阵都将叠加在一起,这样,当图像的形状加载到计算机中时,它的形状为 (Height, Width, 3)
其中Height是整个高度上的像素数,Width是整个宽度上的像素数,3表示通道数,在这种情况下,我们有3个通道R,G和B。
数值范围:
dtype=np.uint8),适用于大多数图像文件的读写;dtype=np.float32),常用于归一化处理(如:作为深度学习输入)。# 将int8图像转为浮点数图像
img_float = img_bgr.astype(np.float32) / 255.0 # 归一化到[0,1]
(Height, Width);(Height, Width, 3);(Height, Width, 4),含透明度(Alpha)通道。img.shape获取图像尺寸(如(480, 640, 3)表示480行、640列的彩色图像);img.dtype查看数据类型(如uint8)。cv2 and matplotlib在这一部分,我们将介绍如何使用Python中的cv2和matplotlib库来进行图像的输入输出(I/O)操作。我们将学习如何读取、显示和保存图像,并了解这两个库之间的区别。
OpenCV(Open Source Computer Vision Library)是DIP领域最常用的开源库,支持多种图像格式(BMP、PNG、JPEG等)的快速处理。其核心数据结构为numpy.ndarray,图像以多维数组形式存储。以下代码片段实现图像的基本I/O操作:
import cv2
# 读取图像(彩色图像默认为 BGR 格式)
img = cv2.imread('input.jpg') # 返回值为numpy数组,形状为 (Height, Width, Channels)
# 保存图像
cv2.imwrite('output.jpg', img) # 自动根据文件扩展名选择编码格式
cv2.imdecode() 替代 cv2.imread() ;cv2.imread() 的第二个参数可指定读取模式:
cv2.IMREAD_COLOR(默认,读取彩色图像)cv2.IMREAD_GRAYSCALE(读取灰度图像)cv2.IMREAD_UNCHANGED(保留原始通道,如含透明度的PNG)Matplotlib makes easy things easy and hard things possible!
Matplotlib是Python中用于数据可视化的标准库,其pyplot模块支持图像显示功能,但默认以RGB格式解析图像。与OpenCV结合使用时,需要进行一次图像通道的转换
import cv2
import matplotlib.pyplot as plt
img_bgr = cv2.imread('input.jpg') # 读取图片
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) # 转换颜色空间(BGR -> RGB)
# 使用Matplotlib显示图像
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.imshow(img_bgr)
plt.title("BGR (OpenCV Default)")
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(img_rgb)
plt.title("RGB (Matplotlib Default)")
plt.axis('off')
plt.show()
cv2.cvtColor()用于颜色空间转换,cv2.COLOR_BGR2RGB表示从BGR转换为RGB;
plt.imshow(img_bgr),Matplotlib会将BGR误认为RGB,导致颜色失真;plt.figure(figsize=(8, 4))设置图像大小;plt.subplot()用于创建子图,参数为(行数, 列数, 当前子图索引);plt.axis('off')用于隐藏坐标轴;plt.imshow()支持多种色彩映射(如灰度图用cmap='gray')。cv2 库读取一张彩色图像,使用 matplotlib 库展示图像。cv2 库将 BGR 通道转换成 RGB 通道。请跟随 Project_Week_1 中的 01_ImageOperations.ipynb 中的指示进行操作吧!
Optional Themes: ShanghaiTech_Tutorial / NaiLoong / QYGG