- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
在OpenCV的G-API模塊中,逐像素操作指的是對圖像中的每個像素單獨進行處理的操作。這些操作可以通過G-API的計算圖(Graph API)來高效地執行。G-API提供了一系列用于實現各種圖像處理任務的函數,如算術運算、邏輯運算和其他像素級別的變換。
相關函數
以下是關于Graph API中逐像素操作的一些說明和示例:
-
算術運算:包括加法、減法、乘法、除法等,例如cv::gapi::add、cv::gapi::sub、cv::gapi::mul、cv::gapi::div。
-
邏輯運算:如與、或、非、異或等操作,適用于二值圖像處理,例如cv::gapi::bitwise_and、cv::gapi::bitwise_or等。
-
其他變換:還包括一些其他的像素級變換,如絕對差值(cv::gapi::absdiff)、位移(cv::gapi::shift)等。
通過使用G-API,你可以構建一個計算圖,該圖定義了數據如何流動以及各個操作如何串聯起來以完成復雜的圖像處理任務。這種方法不僅提高了代碼的可讀性,還能夠利用優化后的后端實現加速計算過程。
按位與操作cv::gapi::bitwise_and
cv::gapi::bitwise_and 是 OpenCV G-API 模塊中的一個函數,用于執行兩個矩陣(圖像)之間的逐像素按位與操作。這個操作對于每個對應的像素點,將 src1 和 src2 的像素值進行按位與運算,并將結果存儲在輸出矩陣中。
- 對于浮點型矩陣,將使用其特定于機器的位表示(通常是符合 IEEE754 標準的)進行操作。
- 對于多通道矩陣,每個通道將獨立處理。
- 輸出矩陣必須具有與輸入矩陣相同的尺寸和深度。
支持的矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.bitwise_and”
函數原型
GMat cv::gapi::bitwise_and
(const GMat & src1,const GMat & src2
)
參數:
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 9, 8, 7, 6, 5, 4, 3, 2, 1 );// 定義G-API計算圖cv::GComputation bitwiseAndComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::bitwise_and( in1, in2 ); // 計算逐像素按位與return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖bitwiseAndComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise bitwise AND result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise bitwise AND result:
[ 1, 0, 3;4, 5, 4;3, 0, 1]
按位非操作函數bitwise_not()
反轉數組的每一位。
該函數 bitwise_not 計算輸入矩陣每個元素的按位取反:
dst ( I ) = ? src ( I ) \texttt{dst} (I) = \neg \texttt{src} (I) dst(I)=?src(I)
對于浮點數矩陣,將使用其特定于機器的位表示(通常是符合 IEEE754 標準的)進行操作。對于多通道矩陣,每個通道將獨立處理。輸出矩陣必須與輸入矩陣具有相同的尺寸和深度。
支持的矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.bitwise_not”
函數原型
GMat cv::gapi::bitwise_not
(const GMat &src
)
參數:
- 參數src: 輸入矩陣。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );// 定義G-API計算圖cv::GComputation bitwiseNotComp( []() {cv::GMat in;cv::GMat out = cv::gapi::bitwise_not( in ); // 計算逐像素按位取反return cv::GComputation( cv::GIn( in ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖bitwiseNotComp.apply( cv::gin( src ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise bitwise NOT result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise bitwise NOT result:
[254, 253, 252;251, 250, 249;248, 247, 246]
按位或操作函數bitwise_or()
計算兩個矩陣(src1 | src2)的逐元素按位邏輯或。
該函數計算兩個相同大小矩陣的每個元素的按位邏輯或:
- 對于浮點數矩陣,將使用其特定于機器的位表示(通常是符合 IEEE754 標準的)進行操作。
- 對于多通道矩陣,每個通道將獨立處理。
- 輸出矩陣必須具有與輸入矩陣相同的尺寸和深度。
支持的矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.bitwise_or”
函數原型
GMat cv::gapi::bitwise_or
(const GMat & src1,const GMat & src2
)
參數:
- src1: 第一個輸入矩陣。
- src2: 第二個輸入矩陣。
示例代碼
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 9, 8, 7, 6, 5, 4, 3, 2, 1 );// 定義G-API計算圖cv::GComputation bitwiseOrComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::bitwise_or( in1, in2 ); // 計算逐像素按位或return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖bitwiseOrComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise bitwise OR result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise bitwise OR result:
[ 9, 10, 7;6, 5, 6;7, 10, 9]
按位異或操作函數bitwise_xor()
計算兩個矩陣(src1 ^ src2)的逐元素按位邏輯“異或”。
該函數計算兩個相同大小矩陣的每個元素的按位邏輯“異或”:
- 對于浮點數矩陣,將使用其特定于機器的位表示(通常是符合 IEEE754 標準的)進行操作。
- 對于多通道矩陣,每個通道將獨立處理。
- 輸出矩陣必須具有與輸入矩陣相同的尺寸和深度。
支持的矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.bitwise_xor”
函數原型
GMat cv::gapi::bitwise_xor
(const GMat & src1,const GMat & src2
)
參數:
- 參數src1: 第一個輸入矩陣。
- 參數 src2: 第二個輸入矩陣。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 9, 8, 7, 6, 5, 4, 3, 2, 1 );// 定義G-API計算圖cv::GComputation bitwiseXorComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::bitwise_xor( in1, in2 ); // 計算逐像素按位異或return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖bitwiseXorComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise bitwise XOR result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise bitwise XOR result:
[ 8, 10, 4;2, 0, 2;4, 10, 8]
相等比較操作函數cmpEQ()
對兩個矩陣進行逐元素比較,檢查第一個矩陣中的元素是否等于第二個矩陣中的元素。
該函數比較兩個相同大小的矩陣 src1 和 src2 的元素:
dst ( I ) = src1 ( I ) = = src2 ( I ) \texttt{dst} (I) = \texttt{src1} (I) == \texttt{src2} (I) dst(I)=src1(I)==src2(I)
輸出矩陣的深度必須是 CV_8U,并且必須與輸入矩陣具有相同的尺寸和通道數。
支持的輸入矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.compare.cmpEQ”
函數原型
GMat cv::gapi::cmpEQ
(const GMat & src1,const GMat & src2
)
參數:
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣或標量,其深度應與第一個輸入矩陣相同。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 0, 6, 7, 8, 9 );// 定義G-API計算圖cv::GComputation cmpEQComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::cmpEQ( in1, in2 ); // 計算逐像素相等性比較return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖cmpEQComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise equality comparison result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise equality comparison result:
[255, 255, 255;255, 0, 255;255, 255, 255]
“大于等于”比較操作函數cmpGE()
對兩個矩陣進行逐元素比較,檢查第一個矩陣中的元素是否大于或等于第二個矩陣中的元素。
該函數比較兩個相同大小的矩陣 src1 和 src2 的元素:
dst ( I ) = src1 ( I ) > = src2 ( I ) \texttt{dst} (I) = \texttt{src1} (I) >= \texttt{src2} (I) dst(I)=src1(I)>=src2(I)
當比較結果為真時,輸出數組中相應位置的元素被設置為 255。比較操作可以用等效的矩陣表達式替換:
dst = src1 > = src2 \texttt{dst} = \texttt{src1} >= \texttt{src2} dst=src1>=src2
輸出矩陣的深度必須是 CV_8U,并且必須與輸入矩陣具有相同的尺寸和通道數。
支持的輸入矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.compare.cmpGE”
函數原型
GMat cv::gapi::cmpGE
(const GMat & src1,const GMat & src2
)
參數:
- 參數 src1: 第一個輸入矩陣。
- 參數 src2: 第二個輸入矩陣或標量,其深度應與第一個輸入矩陣相同。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 9, 8, 7, 6, 5, 4, 3, 2, 1 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 5, 5, 5, 5, 5, 5, 5, 5, 5 );// 定義G-API計算圖cv::GComputation cmpGEComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::cmpGE( in1, in2 ); // 計算逐像素“大于等于”比較return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖cmpGEComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise greater or equal comparison result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise greater or equal comparison result:
[255, 255, 255;255, 255, 0;0, 0, 0]
“大于”比較操作函數cmpGT()
對兩個矩陣進行逐元素比較,檢查第一個矩陣中的元素是否大于第二個矩陣中的元素。
該函數比較兩個相同大小的矩陣 src1 和 src2 的元素:
dst ( I ) = src1 ( I ) > src2 ( I ) \texttt{dst} (I) = \texttt{src1} (I) > \texttt{src2} (I) dst(I)=src1(I)>src2(I)
當比較結果為真時,輸出數組中相應位置的元素被設置為 255。比較操作可以用等效的矩陣表達式替換:
dst = src1 > src2 \texttt{dst} = \texttt{src1} > \texttt{src2} dst=src1>src2
輸出矩陣的深度必須是 CV_8U,并且必須與輸入矩陣具有相同的尺寸和通道數。
支持的輸入矩陣數據類型包括:CV_8UC1, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.compare.cmpGT”
函數原型
GMat cv::gapi::cmpGT
(const GMat & src1,const GMat & src2
)
參數
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣或標量,其深度應與第一個輸入矩陣相同。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 9, 8, 7, 6, 5, 4, 3, 2, 1 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 5, 5, 5, 5, 5, 5, 5, 5, 5 );// 定義G-API計算圖cv::GComputation cmpGTComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::cmpGT( in1, in2 ); // 計算逐像素“大于”比較return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖cmpGTComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise greater than comparison result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise greater than comparison result:
[255, 255, 255;255, 0, 0;0, 0, 0]
小于等于”比較操作函數cmpLE()
對兩個矩陣進行逐元素比較,檢查第一個矩陣中的元素是否小于或等于第二個矩陣中的元素。
該函數比較兩個相同大小的矩陣 src1 和 src2 的元素:
dst ( I ) = src1 ( I ) < = src2 ( I ) \texttt{dst} (I) = \texttt{src1} (I) <= \texttt{src2} (I) dst(I)=src1(I)<=src2(I)
當比較結果為真時,輸出數組中相應位置的元素被設置為 255;否則為 0。比較操作可以用等效的矩陣表達式替換:
dst = src1 < = src2 \texttt{dst} = \texttt{src1} <= \texttt{src2} dst=src1<=src2
輸出矩陣的深度必須是 CV_8U,并且必須與輸入矩陣具有相同的尺寸和通道數。
支持的輸入矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.compare.cmpLE”
函數原型
GMat cv::gapi::cmpLE
(const GMat & src1,const GMat & src2
)
參數:
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣或標量,其深度應與第一個輸入矩陣相同。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 5, 5, 5, 5, 5, 5, 5, 5, 5 );// 定義G-API計算圖cv::GComputation cmpLEComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::cmpLE( in1, in2 ); // 計算逐像素“小于等于”比較return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖cmpLEComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise less or equal comparison result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise less or equal comparison result:
[255, 255, 255;255, 255, 0;0, 0, 0]
“小于”比較操作函數cmpLT()
對兩個矩陣進行逐元素比較,檢查第一個矩陣中的元素是否小于第二個矩陣中的元素。
該函數比較兩個相同大小的矩陣 src1 和 src2 的元素:
dst ( I ) = src1 ( I ) < src2 ( I ) \texttt{dst} (I) = \texttt{src1} (I) < \texttt{src2} (I) dst(I)=src1(I)<src2(I)
當比較結果為真時,輸出數組中相應位置的元素被設置為 255;否則為 0。比較操作可以用等效的矩陣表達式替換:
dst = src1 < src2 \texttt{dst} = \texttt{src1} < \texttt{src2} dst=src1<src2
輸出矩陣的深度必須是 CV_8U,并且必須與輸入矩陣具有相同的尺寸和通道數。
支持的輸入矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.compare.cmpLT”
函數原型
GMat cv::gapi::cmpLT
(const GMat & src1,const GMat & src2
)
參數:
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣或標量,其深度應與第一個輸入矩陣相同。
代碼示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 創建示例輸入矩陣cv::Mat src1 = ( cv::Mat_< uchar >( 3, 3 ) << 1, 2, 3, 4, 5, 6, 7, 8, 9 );cv::Mat src2 = ( cv::Mat_< uchar >( 3, 3 ) << 5, 5, 5, 5, 5, 5, 5, 5, 5 );// 定義G-API計算圖cv::GComputation cmpLTComp( []() {cv::GMat in1, in2;cv::GMat out = cv::gapi::cmpLT( in1, in2 ); // 計算逐像素“小于”比較return cv::GComputation( cv::GIn( in1, in2 ), cv::GOut( out ) );} );// 輸出矩陣cv::Mat dst;// 執行計算圖cmpLTComp.apply( cv::gin( src1, src2 ), cv::gout( dst ) );// 打印結果std::cout << "Element-wise less than comparison result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise less than comparison result:
[255, 255, 255;255, 0, 0;0, 0, 0]
“不等于”比較操作函數cmpNE()
對兩個矩陣進行逐元素比較,檢查第一個矩陣中的元素是否不等于第二個矩陣中的元素。
該函數比較兩個相同大小的矩陣 src1 和 src2 的元素:
dst ( I ) = src1 ( I ) ! = src2 ( I ) \texttt{dst} (I) = \texttt{src1} (I) != \texttt{src2} (I) dst(I)=src1(I)!=src2(I)
當比較結果為真時,輸出數組中相應位置的元素被設置為 255;否則為 0。比較操作可以用等效的矩陣表達式替換:
dst = src1 ! = src2 \texttt{dst} = \texttt{src1} != \texttt{src2} dst=src1!=src2
輸出矩陣的深度必須是 CV_8U,并且必須與輸入矩陣具有相同的尺寸和通道數。
支持的輸入矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.compare.cmpNE”
函數原型
GMat cv::gapi::cmpNE
(const GMat & src1,const GMat & src2
)
參數:
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣或標量,其深度應與第一個輸入矩陣相同。
代碼示例
#include <opencv2/opencv.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>int main() {// 創建示例輸入矩陣cv::Mat src1 = (cv::Mat_<uchar>(3, 3) << 1, 2, 3,4, 5, 6,7, 8, 9);cv::Mat src2 = (cv::Mat_<uchar>(3, 3) << 5, 5, 5,5, 5, 5,5, 5, 5);// 定義G-API計算圖cv::GComputation cmpNEComp([](){cv::GMat in1, in2;cv::GMat out = cv::gapi::cmpNE(in1, in2); // 計算逐像素“不等于”比較return cv::GComputation(cv::GIn(in1, in2), cv::GOut(out));});// 輸出矩陣cv::Mat dst;// 執行計算圖cmpNEComp.apply(cv::gin(src1, src2), cv::gout(dst));// 打印結果std::cout << "Element-wise not equal comparison result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise not equal comparison result:
[255, 255, 255;255, 0, 255;255, 255, 255]
基于掩碼從兩個矩陣中選擇元素的函數select()
根據給定的掩碼從第一個或第二個輸入矩陣中選擇值。該函數將輸出矩陣設置為:如果掩碼矩陣對應位置的值是 255,則采用第一個輸入矩陣中的值;如果掩碼矩陣對應位置的值是 0,則采用第二個輸入矩陣中的值。
輸入掩碼矩陣必須是 CV_8UC1 類型,其他兩個輸入矩陣和輸出矩陣應具有相同的類型。所有輸入和輸出矩陣的尺寸應該相同。支持的輸入矩陣數據類型包括:CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。
注意:
該函數的文本ID是 “org.opencv.core.pixelwise.select”
函數原型
GMat cv::gapi::select
(const GMat & src1,const GMat & src2,const GMat & mask
)
參數
- 參數src1: 第一個輸入矩陣。
- 參數src2: 第二個輸入矩陣。
- 參數mask: 掩碼輸入矩陣。
代碼示例
#include <opencv2/opencv.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>int main() {// 創建示例輸入矩陣cv::Mat src1 = (cv::Mat_<uchar>(3, 3) << 1, 2, 3,4, 5, 6,7, 8, 9);cv::Mat src2 = (cv::Mat_<uchar>(3, 3) << 9, 8, 7,6, 5, 4,3, 2, 1);cv::Mat mask = (cv::Mat_<uchar>(3, 3) << 0, 255, 0,255, 0, 255,0, 255, 0);// 定義G-API計算圖cv::GComputation selectComp([](){cv::GMat in1, in2, msk;cv::GMat out = cv::gapi::select(in1, in2, msk); // 根據掩碼選擇元素return cv::GComputation(cv::GIn(in1, in2, msk), cv::GOut(out));});// 輸出矩陣cv::Mat dst;// 執行計算圖selectComp.apply(cv::gin(src1, src2, mask), cv::gout(dst));// 打印結果std::cout << "Element-wise selection result: \n" << dst << std::endl;return 0;
}
運行結果
Element-wise selection result:
[ 9, 2, 7;4, 5, 6;3, 8, 1]
…………………………………………………………完結………………………………………………………………………………