OpenCV 圖形API(21)逐像素操作

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

…………………………………………………………完結………………………………………………………………………………

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77116.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CubeMX配置STM32VET6實現網口通信(無操作系統版-附源碼)

下面是使用CubeMX配置STM32F407VET6,實現以太網通訊(PHY芯片為LAN8720)的具體步驟總結: 一、硬件連接方式: 硬件原理圖: 使用外部晶振為PHY芯片提供時鐘。 STM32F407VET6 與 LAN8720 采用 RMII 模式連接。STM32F407VET6引腳功能(RMII)LAN8720引腳PA1ETH_REF_CLKREF_CL…

Android Compose 中獲取和使用 Context 的完整指南

在 Android Jetpack Compose 中&#xff0c;雖然大多數 UI 組件不再需要直接使用 Context&#xff0c;但有時你仍然需要訪問它來執行一些 Android 平臺特定的操作。以下是幾種在 Compose 中獲取和使用 Context 的方法&#xff1a; 1. 使用 LocalContext 這是 Compose 中最常用…

在VMware下Hadoop分布式集群環境的配置--基于Yarn模式的一個Master節點、兩個Slaver(Worker)節點的配置

你遇到的大部分ubuntu中配置hadoop的問題這里都有解決方法&#xff01;&#xff01;&#xff01;&#xff08;近10000字&#xff09; 概要 在Docker虛擬容器環境下&#xff0c;進行Hadoop-3.2.2分布式集群環境的配置與安裝&#xff0c;完成基于Yarn模式的一個Master節點、兩個…

PID燈控算法

根據代碼分析&#xff0c;以下是針對PID算法和光敏傳感器系統的優化建議&#xff0c;分為算法優化、代碼結構優化和系統級優化三部分&#xff1a; 一、PID算法優化 1. 增量式PID 輸出平滑 // 修改PID計算函數 uint16_t PID_calculation_fun(void) {if(PID_Str_Val.Tdata >…

文件映射mmap與管道文件

在用戶態申請內存&#xff0c;內存內容和磁盤內容建立一一映射 讀寫內存等價于讀寫磁盤 支持隨機訪問 簡單來說&#xff0c;把磁盤里的數據與內存的用戶態建立一一映射關系&#xff0c;讓讀寫內存等價于讀寫磁盤&#xff0c;支持隨機訪問。 管道文件&#xff1a;進程間通信機…

在 Java 中調用 ChatGPT API 并實現流式接收(Server-Sent Events, SSE)

文章目錄 簡介OkHttp 流式獲取 GPT 響應通過 SSE 流式推送前端后端代碼消息實體接口接口實現數據推送給前端 前端代碼創建 sseClient.jsvue3代碼 優化后端代碼 簡介 用過 ChatGPT 的伙伴應該想過自己通過調用ChatGPT官網提供的接口來實現一個自己的問答機器人&#xff0c;但是…

硬盤分區格式之GPT(GUID Partition Table)筆記250407

硬盤分區格式之GPT&#xff08;GUID Partition Table&#xff09;筆記250407 GPT&#xff08;GUID Partition Table&#xff09;硬盤分區格式詳解 GPT&#xff08;GUID Partition Table&#xff09;是替代傳統 MBR 的現代分區方案&#xff0c;專為 UEFI&#xff08;統一可擴展固…

Vite環境下解決跨域問題

在 Vite 開發環境中&#xff0c;可以通過配置代理來解決跨域問題。以下是具體步驟&#xff1a; 在項目根目錄下找到 vite.config.js 文件&#xff1a;如果沒有&#xff0c;則需要創建一個。配置代理&#xff1a;在 vite.config.js 文件中&#xff0c;使用 server.proxy 選項來…

交換機與ARP

交換機與 ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析協議&#xff09; 的關系主要體現在 局域網&#xff08;LAN&#xff09;內設備通信的地址解析與數據幀轉發 過程中。以下是二者的核心關聯&#xff1a; 1. 基本角色 交換機&#xff1a;工作在 數據鏈…

【Spring】小白速通AOP-日志記錄Demo

這篇文章我將通過一個最常用的AOP場景-方法調用日志記錄&#xff0c;帶你徹底理解AOP的使用。例子使用Spring BootSpring AOP實現。 如果對你有幫助可以點個贊和關注。謝謝大家的支持&#xff01;&#xff01; 一、Demo實操步驟&#xff1a; 1.首先添加Maven依賴 <!-- Sp…

git功能點管理

需求&#xff1a; 功能模塊1 已經完成&#xff0c;已經提交并推送到遠程&#xff0c;準備交給測試。功能模塊2 已經完成&#xff0c;但不提交給測試&#xff0c;繼續開發。功能模塊3 正在開發中。 管理流程&#xff1a; 創建并開發功能模塊1&#xff1a; git checkout main…

QGIS實戰系列(六):進階應用篇——Python 腳本自動化與三維可視化

歡迎來到“QGIS實戰系列”的第六期!在前幾期中,我們從基礎操作到插件應用逐步提升了 QGIS 技能。這一篇,我們將邁入進階領域,探索如何用 Python 腳本實現自動化,以及如何創建三維可視化效果,讓你的 GIS 項目更高效、更立體。 第一步:Python 腳本自動化 QGIS 內置了 Py…

高德地圖 3D 渲染-區域紋理圖添加

引入-初始化地圖&#xff08;關鍵代碼&#xff09; // 初始化頁面引入高德 webapi -- index.html 文件 <script src https://webapi.amap.com/maps?v2.0&key您申請的key值></script>// 添加地圖容器 <div idcontainer ></div>// 地圖初始化應該…

ffmpeg視頻轉碼相關

ffmpeg視頻轉碼相關 簡介參數 實戰舉栗子獲取視頻時長視頻轉碼mp4文件轉為hls m3u8 ts等文件圖片轉視頻抽取視頻第一幀獲取基本信息 轉碼日志輸出詳解轉碼耗時測試 簡介 FFmpeg 是領先的多媒體框架&#xff0c;能夠解碼、編碼、 轉碼、復用、解復用、流、過濾和播放 幾乎所有人…

【ISP】HDR技術中Sub-Pixel與DOL的對比分析

一、原理對比 Sub-Pixel&#xff08;空間域HDR&#xff09; ? 核心機制&#xff1a;在單個像素內集成一大一小兩個子像素&#xff08;如LPD和SPD&#xff09;&#xff0c;利用其物理特性差異&#xff08;靈敏度、滿阱容量&#xff09;同時捕捉不同動態范圍的信號。 ? 大像素&…

Vulnhub-IMF靶機

本篇文章旨在為網絡安全滲透測試靶機教學。通過閱讀本文&#xff0c;讀者將能夠對滲透Vulnhub系列IMF靶機有一定的了解 一、信息收集階段 靶機下載地址&#xff1a;https://www.vulnhub.com/entry/imf-1,162/ 因為靶機為本地部署虛擬機網段&#xff0c;查看dhcp地址池設置。得…

Linux內核中TCP協議棧的實現:tcp_close函數的深度剖析

引言 TCP(傳輸控制協議)作為互聯網協議族中的核心協議之一,負責在不可靠的網絡層之上提供可靠的、面向連接的字節流服務。Linux內核中的TCP協議棧實現了TCP協議的全部功能,包括連接建立、數據傳輸、流量控制、擁塞控制以及連接關閉等。本文將深入分析Linux內核中tcp_close…

java+postgresql+swagger-多表關聯insert操作(七)

入參為json&#xff0c;然后根據需要對多張表進行操作&#xff1a; 入參格式&#xff1a; [{"custstoreName":"swagger-測試經銷商01","customerName":"swagger-測試客戶01","propertyNo":"swaggertest01",&quo…

R語言——繪制生命曲線圖(細胞因子IL5)

繪制生命曲線圖&#xff08;根據細胞因子&#xff09; 說明流程代碼加載包讀取Excel文件清理數據重命名列名處理IL-5中的"<"符號 - 替換為檢測下限的一半首先找出所有包含"<"的值檢查缺失移除缺失值根據IL-5中位數將患者分為高低兩組 創建生存對象擬…

Python----計算機視覺處理(Opencv:道路檢測完整版:透視變換,提取車道線,車道線擬合,車道線顯示,)

Python----計算機視覺處理&#xff08;Opencv:道路檢測之道路透視變換) Python----計算機視覺處理&#xff08;Opencv:道路檢測之提取車道線&#xff09; Python----計算機視覺處理&#xff08;Opencv:道路檢測之車道線擬合&#xff09; Python----計算機視覺處理&#xff0…