彩色模型之生成RGB彩色立方体的隐藏面和剖面的python实现(不同通道如何合作以产生不同的颜色)——数字图像处理

原理

图像表示:

图像通常是由像素组成的二维矩阵。对于彩色图像,通常有三个通道(红、绿、蓝),每个通道都有一个矩阵。
颜色空间:
RGB(红、绿、蓝)是最常见的颜色空间,其中每个像素由三个分量表示。其他颜色空间包括灰度(只有一个通道表示亮度)、HSV(色相、饱和度、亮度)等。
**通道合并与分离:**图像的颜色通道可以合并成一个多通道图像,也可以从多通道图像中分离出各个通道。

代码实现下图

在这里插入图片描述

提示

生成3个RGB分量图像并合成为一幅彩色图像。上图是通过RGB彩色立方体中心并与GB平面平行的彩色平面,大小为256×256。首先生成灰度值为128的R分量图,接着生成两幅GB分量图(可以用np.meshgrid函数生成,也可以用双层循环的方式生成),最后用cv2.merge函数将三个通道合成为一幅彩色图像并显示。注意:opencv中彩色图像的通道顺序(BGR)和matplotlib中的顺序(RGB)不同,所以合成或显示的时候需要注意一下。

在这里插入图片描述
上图是分别将R、G、B分量置零后的结果。

python代码实现

import cv2
import numpy as np
from matplotlib import pyplot as plt
rows = 256
cols = 256
channel1 = np.ones((rows, cols), dtype=int)*128
channel2 = np.zeros((rows, cols), dtype=int)
vec = range(256)
channel3, channel4 = np.meshgrid(vec, vec)

img1 = cv2.merge([channel1, channel3, channel4[::-1]])

plt.subplot(2, 2, 1)
plt.imshow(channel1, vmin=0, vmax=255, cmap='gray')
plt.axis('off')
plt.title('R')

plt.subplot(2, 2, 2)
plt.imshow(channel3, cmap='gray')
plt.axis('off')
plt.title('G')

plt.subplot(2, 2, 3)
plt.imshow(channel4[::-1], cmap='gray')
plt.axis('off')
plt.title('B')

plt.subplot(2, 2, 4)
plt.imshow(img1)
plt.axis('off')
plt.title('color')

plt.savefig('color1.jpg')
plt.show()

img2 = cv2.merge([channel2, channel3, channel4[::-1]])
img3 = cv2.merge([channel3[:,::-1], channel2, channel4[::-1]])
img4 = cv2.merge([channel4, channel3, channel2])

plt.subplot(1, 3, 1)
plt.imshow(img2)
plt.axis('off')
plt.title('R=0')

plt.subplot(1, 3, 2)
plt.imshow(img3)
plt.axis('off')
plt.title('G=0')

plt.subplot(1, 3, 3)
plt.imshow(img4)
plt.axis('off')
plt.title('B=0')
plt.show()

结果展示

在这里插入图片描述
在这里插入图片描述

总结

首先生成灰度值为128的R分量图,接着生成两幅GB分量图(可以用np.meshgrid函数生成,也可以用双层循环的方式生成),最后用cv2.merge函数将三个通道合成为一幅彩色图像并显示。
在这里插入图片描述
总结来说,这段代码演示了 RGB 颜色模型的工作原理,特别是如何通过改变和组合不同的颜色通道来创建多种颜色和效果。通过调整每个通道的强度,可以生成广泛的颜色范围,这是数字图像处理中的一个基本概念