昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 634|回复: 0
收起左侧

OpenCV中对RGB图像数据的存储顺序是BGR

[复制链接]

239

主题

241

帖子

928

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
928
昊虹君 发表于 2022-10-26 12:00 | 显示全部楼层 |阅读模式
OpenCV中对RGB图像数据的存储顺序是BGR

事实证明:OpenCV中对RGB图像数据的存储顺序是BGR。

验证这个事实的例子如下:

我们读入三张纯色图像,分别为纯红、纯绿、纯蓝。

三张图片分别如下:


上面三张图的百度网盘下载链接:
https://pan.baidu.com/s/1b0XfTQcGxiXePu1_ZEsUig?pwd=m6ut

然后用下面的代码读入下面三张图,观察变量的数据存储结构:
[C++] 纯文本查看 复制代码
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>


int main()
{

	cv::Mat Red_pic = cv::imread("F:/material/images/2022/2022-10/red.bmp"); //读入纯红色图像
	cv::Mat Green_pic = cv::imread("F:/material/images/2022/2022-10/green.bmp"); //读入纯绿色图像
	cv::Mat Blue_pic = cv::imread("F:/material/images/2022/2022-10/blue.bmp"); //读入纯蓝色图像


	int red_0, red_1, red_2;//分别存储纯红色图像0通道、1通道、2通道的数值
	int green_0, green_1, green_2;//分别存储纯绿色图像0通道、1通道、2通道的数值
	int blue_0, blue_1, blue_2;//分别存储纯绿色图像0通道、1通道、2通道的数值


	red_0 = Red_pic.at<cv::Vec3b>(50, 50)[0];
	red_1 = Red_pic.at<cv::Vec3b>(50, 50)[1];
	red_2 = Red_pic.at<cv::Vec3b>(50, 50)[2];

	green_0 = Green_pic.at<cv::Vec3b>(50, 50)[0];
	green_1 = Green_pic.at<cv::Vec3b>(50, 50)[1];
	green_2 = Green_pic.at<cv::Vec3b>(50, 50)[2];

	blue_0 = Blue_pic.at<cv::Vec3b>(50, 50)[0];
	blue_1 = Blue_pic.at<cv::Vec3b>(50, 50)[1];
	blue_2 = Blue_pic.at<cv::Vec3b>(50, 50)[2];


	return 0;
}

启动调试,结果如下:

从结果可以看出:
对于纯红色图像,第2通道的值为255,说明第2通道为R通道;
对于纯绿色图像,第1通道的值为255,说明第1通道为G通道;
对于纯蓝色图像,第0通道的值为255,说明第0通道为B通道。

综上,OpenCV对RGB图像数据的存储顺序是BGR。

另外从文章 https://www.hhai.cc/thread-89-1-1.html 可以看出,在Python-OpenCV中,OpenCV对RGB图像数据的存储顺序也是BGR。

另外,大家要注意,OpenCV中Scalar()的参数顺序也是B,G,R,所以cv::Scalar( 0, 0, 255)代表的是红色
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2022024117号-1 )

GMT+8, 2024-5-7 11:03 , Processed in 0.026630 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表