我使用RGB三色的图来证明,图片从OpenCV的里面获取,将其修改为‘00.png’。
代码:
import matplotlib.pyplot as plt
import cv2
import numpy as np
img=cv2.imread('D://00.png')
b,g,r = cv2.split(img)
cv2.namedWindow("original_img", cv2.WINDOW_NORMAL)
cv2.imshow("original_img",img)
cv2.namedWindow("img_b", cv2.WINDOW_NORMAL)
cv2.imshow("img_b",b)
cv2.namedWindow("img_g", cv2.WINDOW_NORMAL)
cv2.imshow("img_g",g)
cv2.namedWindow("img_r", cv2.WINDOW_NORMAL)
cv2.imshow("img_r",r)
cv2.waitKey(0)
步骤:
读入图片
将图片的三个通道分开。
然后用cv2.imshow展示原始图片和三个通道。
结果如下:
从上面的图片可以看出:
img_b展示的蓝色。
img_g展示的绿色。
img_r展示的红色。
C++版代码:
#include#include #include #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include using namespace cv; int main() { Mat src = imread("00.png"); namedWindow("src", CV_WINDOW_NORMAL); imshow("src", src);//原图像 Mat rgb[3]; split(src, rgb); namedWindow("B", CV_WINDOW_NORMAL); imshow("B", rgb[0]);//第一个通道存放B分量 namedWindow("G", CV_WINDOW_NORMAL); imshow("G", rgb[1]);//第二个通道存放G分量 namedWindow("R", CV_WINDOW_NORMAL); imshow("R", rgb[2]);//第三个通道存放R分量 waitKey(0); }
使用plt做图片展示
import matplotlib.pyplot as plt
import cv2
import numpy as np
img=cv2.imread('D://00.png')
b,g,r = cv2.split(img)
fig, axes = plt.subplots(1, 4, figsize=(15, 15))
axes[0].imshow(img)
axes[1].imshow(b)
axes[2].imshow(g)
axes[3].imshow(r)
plt.show()
输出图片:
plt展示的原始图片,我们就可以看出BGR通道了。
imdecode方法中有这样一句话,在彩色图像的情况下,解码后的图像将以 B G R 顺序存储通道。我用下面的代码证明这句话。
代码:
with open("D://00.png", "rb") as image:
f = image.read()
# convert to numpy array
image = np.asarray(bytearray(f))
img = cv2.imdecode(image, 1)
b, g, r = cv2.split(img)
cv2.namedWindow("original_img", cv2.WINDOW_NORMAL)
cv2.imshow("original_img", img)
cv2.namedWindow("img_b", cv2.WINDOW_NORMAL)
cv2.imshow("img_b", b)
cv2.namedWindow("img_g", cv2.WINDOW_NORMAL)
cv2.imshow("img_g", g)
cv2.namedWindow("img_r", cv2.WINDOW_NORMAL)
cv2.imshow("img_r", r)
cv2.waitKey(0)
输出结果:



