OpenCV 图形API(69)图像与通道拼接函数------将一个 GMat 类型的对象转换为另一个具有不同深度GMat对象函数convertTo()

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

算法描述

将一个矩阵转换为另一种数据深度,并可选择进行缩放。

该方法将源像素值转换为目标数据深度。最终应用 saturate_cast<> 以避免可能出现的数据溢出情况:
m ( x , y ) = s a t u r a t e _ c a s t < r T y p e > ( α ( ∗ t h i s ) ( x , y ) + β ) m(x,y) = saturate \_ cast<rType>( \alpha (*this)(x,y) + \beta ) m(x,y)=saturate_cast<rType>(α(∗this)(x,y)+β)

输出矩阵必须与输入矩阵大小相同。

注意

此函数的文本标识符是 "org.opencv.core.transform.convertTo"。

函数原型

cpp 复制代码
GMat cv::gapi::convertTo 	
(
 	const GMat &  	src,
	int  	rdepth,
	double  	alpha = 1,
	double  	beta = 0 
) 	

参数

  • 参数 src: 需要被转换的输入矩阵。
  • 参数 rdepth: 目标输出矩阵的数据深度,更确切地说是深度(因为通道数量与输入相同);如果 rdepth 是负数,则输出矩阵将具有与输入相同的深度。
  • 参数 alpha: 可选的比例因子。
  • 参数 beta: 添加到缩放值的可选增量。

代码示例

cpp 复制代码
#include <iomanip>  // For std::setprecision
#include <iostream>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>

int main()
{
    // 创建一个 G-API 图像处理图
    cv::GMat in;

    // 定义转换操作:例如从 CV_8U 转换到 CV_32F,并应用 alpha 和 beta
    int rdepth   = CV_32F;  // 目标深度,这里是32位浮点数
    double alpha = 1.0;     // 缩放因子
    double beta  = 0.0;     // 增量值

    // 使用 convertTo 方法
    cv::GMat dst = cv::gapi::convertTo( in, rdepth, alpha, beta );

    // 定义 G-API 图(graph)和编译它
    cv::GComputation graph( cv::GIn( in ), cv::GOut( dst ) );

    // 准备输入数据:这里以随机生成的数据为例
    cv::Mat src_mat = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );  // 示例8位无符号整数矩阵

    cv::Mat dst_mat;

    // 在输入数据上运行 G-API 图像处理图
    graph.apply( src_mat, dst_mat, cv::compile_args( cv::gapi::kernels() ) );

    // 输出结果
    std::cout << "Original matrix (type CV_8U):\n" << src_mat << std::endl;
    std::cout << "Converted matrix (type CV_32F):\n";
    std::cout << std::fixed << std::setprecision( 1 );  // 设置浮点数输出格式
    for ( int i = 0; i < dst_mat.rows; ++i )
    {
        for ( int j = 0; j < dst_mat.cols; ++j )
        {
            std::cout << dst_mat.at< float >( i, j ) << " ";
        }
        std::cout << "\n";
    }

    return 0;
}

运行结果

bash 复制代码
Original matrix (type CV_8U):
[  1,   2,   3;
   4,   5,   6;
   7,   8,   9]
Converted matrix (type CV_32F):
1.0 2.0 3.0 
4.0 5.0 6.0 
7.0 8.0 9.0 
相关推荐
墨染天姬4 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志4 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114244 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠4 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光4 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好5 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
智星云算力5 小时前
本地GPU与租用GPU混合部署:混合算力架构搭建指南
人工智能·架构·gpu算力·智星云·gpu租用
jinanwuhuaguo5 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
xiaozhazha_5 小时前
效率提升80%:2026年AI CRM与ERP深度集成的架构设计与实现
人工智能
枫叶林FYL5 小时前
【自然语言处理 NLP】7.2.2 安全性评估与Constitutional AI
人工智能·自然语言处理