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

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

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

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

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

然后用下面的代码读入下面三张图,观察变量的数据存储结构:

//出处:昊虹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)代表的是红色。

猜你喜欢

转载自blog.csdn.net/wenhao_ir/article/details/51554530#comments_27137012