原理
图像表示:
图像通常是由像素组成的二维矩阵。对于彩色图像,通常有三个通道(红、绿、蓝),每个通道都有一个矩阵。
颜色空间:
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 颜色模型的工作原理,特别是如何通过改变和组合不同的颜色通道来创建多种颜色和效果。通过调整每个通道的强度,可以生成广泛的颜色范围,这是数字图像处理中的一个基本概念