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大小的三通道的彩色图像输入。
上一篇: 斟酌药性 重温补中益气汤
下一篇: C++ Opencv xvid编码录像