OpenCV 图形API(79)图像与通道拼接函数-----将一个三通道的 GMat 图像拆分为三个单独的单通道 GMat函数split3()
- 操作系统: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);// 合并三个调整大小后的通道为一个交错格式的 GMatGMat out = gapi::merge3(b_resized, g_resized, r_resized);// 构建 GComputationGComputation computation(in, out);// 执行计算Mat dst;computation.apply(src_bgr, dst);// 显示结果imshow("原始图像", src_bgr);imshow("调整大小后的图像", dst);waitKey();return 0;
}