欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenCV4.0入门(8)通道分离与合并

程序员文章站 2022-05-16 15:15:55
...

知识点:

OpenCV中的imread()函数原型为:Mat imread(const string& filename, int flags=1 ),flags有如下几种类型

枚举标识 备注
IMREAD_UNCHANGED = -1

8位原通道,新版本已经废置

IMREAD_GRAYSCALE = 0 8位1通道,图像总是转换成灰度 
IMREAD_COLOR = 1

8位3通道,图像总是转换到彩色

IMREAD_ANYDEPTH = 2

1通道,若载入16位或32位图像返回对应深度图像,否则转换为8位

IMREAD_ANYCOLOR = 4

8位3通道

其默认值是 IMREAD_COLOR,即加载三通道彩色图像。如果想展现最真实的图像,可以使用:

imread("xx.jpg", IMREAD_ANYDEPTH | IMREAD_ANYCOLOR );

IMREAD_COLOR 色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、对于三通道的图像OpenCV中提供了两个API函数用以实现通道分离与合并。

- split 通道分离

- merge 通道合并

 

#ifndef DAY08
#define DAY08

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

using namespace std;
using namespace cv;

void day08() {

	Mat src = imread("G:\\opencvTest\\test.jpg");
	if (src.empty()) {
		cout << "could not load image.." << endl;
		return;
	}
	imshow("input", src);

	vector<Mat> mv;
	Mat dst1, dst2, dst3;
	// 蓝色通道为零
	split(src, mv);
	mv[0] = Scalar(0);
	merge(mv, dst1);
	imshow("output1", dst1);

	// 绿色通道为零
	split(src, mv);
	mv[1] = Scalar(0);
	merge(mv, dst2);
	imshow("output2", dst2);

	// 红色通道为零
	split(src, mv);
	mv[2] = Scalar(0);
	merge(mv, dst3);
	imshow("output3", dst3);

	waitKey(0);
}

#endif // !DAY08

 

扩展知识:

在很多CNN的卷积神经网络中输入的图像一般会要求[h, w, ch]其中h是高度、w是指宽度、ch是指通道数数目。

OpenCV DNN模块中关于图像分类的googlenet模型输入[224,224,3]表示的就是224x224大小的三通道的彩色图像输入。