- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
描述
执行两个矩阵的逐元素除法。
函数 div 将一个矩阵除以另一个矩阵:
dst(I) = saturate(src1(I)*scale/src2(I)) \texttt{dst(I) = saturate(src1(I)*scale/src2(I))} dst(I) = saturate(src1(I)*scale/src2(I))
当 src2(I) 的值为零时,结果 dst(I) 也会被设为零。如果 src2(I) 的值为零且数据类型是浮点型,则返回的结果将是正无穷大(Inf)或非数值(NaN),这取决于 IEEE 标准。
对于多通道矩阵,不同通道的数据会被独立处理。输入矩阵可以是单通道或多通道。输出矩阵必须与输入矩阵具有相同的尺寸和深度。
支持的矩阵数据类型为 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意
函数文本ID是 “org.opencv.core.math.div”
函数原型
GMat cv::gapi::div
(
const GMat & src1,
const GMat & src2,
double scale,
int ddepth = -1
)
参数
- 参数src1:第一个输入矩阵。
- 参数src2:与 src1 具有相同大小和深度的第二个输入矩阵。
- 参数scale:标量因子。
- 参数ddepth:输出矩阵的可选深度;仅当 src1.depth() == src2.depth() 时,你可以传递 -1。
代码示例
#include <iostream>
#include <opencv2/gapi/core.hpp> // 包含G-API核心功能
#include <opencv2/opencv.hpp>
int main()
{
// 创建示例数据
cv::Mat src1 = ( cv::Mat_< float >( 2, 2 ) << 1.0f, 2.0f, 3.0f, 4.0f );
cv::Mat src2 = ( cv::Mat_< float >( 2, 2 ) << 2.0f, 1.0f, 0.5f, 0.0f ); // 注意这里包含了一个0值
// 检查输入矩阵是否为空
if ( src1.empty() || src2.empty() )
{
std::cerr << "无法加载输入矩阵,请检查数据。" << std::endl;
return -1;
}
// 定义G-API图中的输入
cv::GMat gsrc1, gsrc2;
double scale = 1.0; // 缩放因子
int ddepth = -1; // 使用默认深度
// 执行除法操作
auto gdst = cv::gapi::div( gsrc1, gsrc2, scale, ddepth );
// 创建一个计算图
cv::GComputation div_graph( cv::GIn( gsrc1, gsrc2 ), cv::GOut( gdst ) );
// 输出矩阵
cv::Mat result;
// 编译并执行计算图
div_graph.apply( cv::gin( src1, src2 ), cv::gout( result ), cv::compile_args() );
// 打印结果
std::cout << "Result: \n" << result << std::endl;
return 0;
}
运行结果
Result:
[0.5, 2;
6, inf]