- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
将一个 3 通道的矩阵拆分为 3 个单通道矩阵。
该函数将一个 3 通道的矩阵拆分成 3 个单通道矩阵:
mv [ c ] ( I ) = src ( I ) c \texttt{mv} [c](I) = \texttt{src} (I)_c mv[c](I)=src(I)c
即输出的每个矩阵对应输入矩阵中的一个通道。
所有输出矩阵的类型 必须为 CV_8UC1(8 位无符号单通道)。
函数 merge3 可以执行相反的操作(将三个单通道矩阵合并成一个 3 通道矩阵)。
注意事项:
函数的文本 ID 是 “org.opencv.core.transform.split3”。
函数原型
std::tuple<GMat, GMat, GMat> cv::gapi::split3
(
const GMat & src
)
参数
- 参数 src:输入的 3 通道图像矩阵(CV_8UC3 类型)。
代码示例
#include <opencv2/opencv.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/gapi/imgproc.hpp>
using namespace cv;
using namespace cv::gapi;
int main() {
// 加载图像
Mat src_bgr = imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png");
if (src_bgr.empty()) {
std::cerr << "无法加载图像!" << std::endl;
return -1;
}
// 定义 G-API 输入输出图
GMat in; // 输入节点
// 拆分输入图像为三个通道(B, G, R)
auto [b, g, r] = gapi::split3(in);
// 将每个通道分别调整大小
Size new_size(320, 240);
GMat b_resized = gapi::resize(b, new_size, INTER_LINEAR);
GMat g_resized = gapi::resize(g, new_size, INTER_LINEAR);
GMat r_resized = gapi::resize(r, new_size, INTER_LINEAR);
// 合并三个调整大小后的通道为一个交错格式的 GMat
GMat out = gapi::merge3(b_resized, g_resized, r_resized);
// 构建 GComputation
GComputation computation(in, out);
// 执行计算
Mat dst;
computation.apply(src_bgr, dst);
// 显示结果
imshow("原始图像", src_bgr);
imshow("调整大小后的图像", dst);
waitKey();
return 0;
}