当前位置: 首页 > news >正文

OpenCV 图形API(74)图像与通道拼接函数-----合并三个单通道图像(GMat)为一个多通道图像的函数merge3()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

从3个单通道矩阵创建一个3通道矩阵。

此函数将多个矩阵合并以生成一个单一的多通道矩阵。即,输出矩阵的每个元素将是输入矩阵元素的串联,其中第i个输入矩阵的元素被视为mv[i].channels()元素向量。输出矩阵必须是CV_8UC3类型。

split3函数执行相反的操作。

注意:

函数的文字ID是"org.opencv.core.transform.merge3"

函数原型

GMat cv::gapi::merge3 	
(const GMat &  	src1,const GMat &  	src2,const GMat &  	src3 
) 		

参数

  • 参数 src1:第一个输入的CV_8UC1类型的矩阵,需要被合并。
  • 参数 src2:第二个输入的CV_8UC1类型的矩阵,需要被合并。
  • 参数 src3:第三个输入的CV_8UC1类型的矩阵,需要被合并。

代码示例

#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 设置图像路径std::string imagePath = "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png";// 加载图像cv::Mat src = cv::imread( imagePath, cv::IMREAD_COLOR );if ( src.empty() ){std::cerr << "Failed to load image!" << std::endl;return -1;}// 分离三个通道std::vector< cv::Mat > channels;cv::split( src, channels );// 检查分离出的通道数量是否正确if ( channels.size() != 3 ){std::cerr << "Expected 3 channels, but got " << channels.size() << std::endl;return -1;}// 定义输入节点(三个单通道图像)cv::GMat g_b, g_g, g_r;// 定义 G-API 图操作:合并三个通道为一个三通道图像cv::GMat g_merged = cv::gapi::merge3( g_b, g_g, g_r );// 构建 GComputation(定义整个计算图)cv::GComputation comp( cv::GIn( g_b, g_g, g_r ), cv::GOut( g_merged ) );// 输出图像容器cv::Mat out;// 正确调用 apply:将输入输出包装为 vectorstd::vector< cv::Mat > inputs  = { channels[ 0 ], channels[ 1 ], channels[ 2 ] };std::vector< cv::Mat > outputs = { out };// 执行 GComputationcomp.apply( inputs, outputs, cv::compile_args() );// 获取真正的输出图像out = outputs[ 0 ];// 检查输出是否为空或者无效大小if ( out.empty() ){std::cerr << "Error: Merged output image is empty!" << std::endl;return -1;}if ( out.rows <= 0 || out.cols <= 0 ){std::cerr << "Error: Merged output image has invalid size: " << out.cols << "x" << out.rows << std::endl;return -1;}// 显示原图和合并后的图像cv::imshow( "Original Image", src );cv::imshow( "Merged Image (G-API)", out );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

http://www.xdnf.cn/news/226693.html

相关文章:

  • 前端技巧——性能优化篇
  • 哪些因素会影响远程视频监控的质量?浅述EasyCVR视频智能诊断技术
  • 【AI平台】n8n入门5:创建MCP服务,及vscode调用MCP测试
  • Spring AOP概念及其实现
  • uniapp如何获取安卓原生的Intent对象
  • 基于用户场景的汽车行驶工况构建:数据驱动下的能耗优化革命
  • 游戏引擎学习第249天:清理调试宏
  • ZYNQ MPSOC之PL与PS数据交互DMA方式
  • Android学习总结之算法篇六(数组和栈)
  • 2025东三省D题深圳杯D题数学建模挑战赛数模思路代码文章教学
  • 边缘计算:数字世界的”末梢神经系统”解析-优雅草卓伊凡
  • 阿里云 ECS 服务器进阶指南:存储扩展、成本优化与架构设计
  • Linux C++ xercesc xml 怎么判断路径下有没有对应的节点
  • C++静态编译标准库(libgcc、libstdc++)
  • (初探)强化学习路径规划的理论基础与代码实现
  • 理解数据湖
  • 无忧AI综合插件,可实现图色识别、机器视觉、图像编辑等多种功能
  • C++ 与多技术融合的深度实践:从 AI 到硬件的全栈协同
  • ActiveMQ 可靠性保障:消息确认与重发机制(二)
  • 【鸿蒙HarmonyOS】一文详解华为的服务卡片
  • 在深度学习中,什么是线性插值(linear interpolation)?
  • 实战:用 Spring Boot 快速构建一个 Kafka 消息系统
  • 江西省电价新政发布!微电网源网荷储充一体化平台重塑企业能源格局!
  • AI 助力 Python:长时序植被遥感动态分析与生态评估
  • spring--事务详解
  • Grounding DINO
  • ROS:发布相机、IMU等设备消息主题
  • 【默子速报】DeepSeek新模型 Prover-V2 报告解读
  • 某大麦某眼手机端-抢票
  • Netflix系统架构解析