关于OpenCV imread和imdecode读取图片是BGR的证明

语言: CN / TW / HK

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

关于OpenCV操作的一些问题。

1、如何证明OpenCV读取的通道是BGR通道?

我使用RGB三色的图来证明,图片从OpenCV的里面获取,将其修改为‘00.png’。 在这里插入图片描述 代码:

cpp 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++版代码: ```cpp

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做图片展示

python 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通道了。

2、如何证明使用imdecode将解码的图片转为BGR图片。

imdecode方法中有这样一句话,在彩色图像的情况下,解码后的图像将以 B G R 顺序存储通道。我用下面的代码证明这句话。 代码: python 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) 输出结果: 在这里插入图片描述