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

举报
AI浩 发表于 2022/08/12 13:40:54 2022/08/12
【摘要】 关于OpenCV操作的一些问题。 1、如何证明OpenCV读取的通道是BGR通道?我使用RGB三色的图来证明,图片从OpenCV的里面获取,将其修改为‘00.png’。代码:import matplotlib.pyplot as pltimport cv2import numpy as npimg=cv2.imread('D://00.png')b,g,r = cv2.split(img)...

关于OpenCV操作的一些问题。

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

我使用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<iostream> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui/highgui_c.h>
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通道了。

2、如何证明使用imdecode将解码的图片转为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)

输出结果:
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。