- 操作系統: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]