- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
描述
计算两个矩阵之间的逐元素差值。
sub 函数计算两个矩阵之间的差值,要求这两个矩阵具有相同的尺寸和通道数:
dst ( I ) = src1 ( I ) − src2 ( I ) \texttt{dst}(I) = \texttt{src1}(I) - \texttt{src2}(I) dst(I)=src1(I)−src2(I)
此函数可以用矩阵表达式替代:
dst = src1 − src2 \texttt{dst} = \texttt{src1} - \texttt{src2} dst=src1−src2
输入矩阵和输出矩阵可以具有相同的或不同的深度。例如,你可以减去两个 8 位无符号矩阵并将结果存储为一个 16 位有符号矩阵。输出矩阵的深度由 ddepth 参数决定。如果 src1.depth() == src2.depth(),ddepth 可以设置为默认值 -1。在这种情况下,输出矩阵将具有与输入矩阵相同的深度。这些矩阵可以是单通道或多通道的。
支持的矩阵数据类型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
该函数的文本ID是 “org.opencv.core.math.sub”
函数原型
GMat cv::gapi::sub
(const GMat & src1,const GMat & src2,int ddepth = -1
)
参数
- 参数src1: 第一个输入矩阵。
- 参数src2: 第二个输入矩阵。
- 参数ddepth: 输出矩阵的可选深度。
代码示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 创建示例输入矩阵cv::Mat src1 = ( cv::Mat_< float >( 3, 3 ) << 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f );cv::Mat src2 = ( cv::Mat_< float >( 3, 3 ) << 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f );// 定义G-API计算图cv::GComputation subComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::sub( in1, in2 ); // 计算逐元素差return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 输出矩阵cv::Mat dst;// 执行计算图subComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印结果std::cout << "Element-wise subtraction result: \n" << dst << std::endl;return 0;
}
运行结果
Element-wise subtraction result:
[4, 4, 4;4, 4, 4;4, 4, 4]