/*=========================================================================*/ // 陣列操做 /*=========================================================================*/ 基本矩陣和圖像運算符 ———————————————————————————————————————————————————————————————————————————— 功能 | 描述 ———————————————————————————————————————————————————————————————————————————— cv::abs() ; || 返回數組中全部元素的絕對值 |——用法: cv :: MatExpr cv :: abs(cv :: InputArray src); cv :: MatExpr cv :: abs(const cv :: MatExpr&src); //矩陣表達式 ———————————————————————————————————————————————————————————————————————————— cv::absdiff(); || 返回兩個數組之間差別的絕對值 |——用法: void cv :: absdiff( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst //結果數組 ) ———————————————————————————————————————————————————————————————————————————— cv::add() ; | 執行兩個數組的元素添加 |——用法: void cv :: add( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 int dtype = -1 //結果數組的輸出類型 ); ———————————————————————————————————————————————————————————————————————————— cv::addWeighted(); | 執行兩個數組的元素加權加法(alpha混合) |——用法: void cv :: addWeighted( cv :: InputArray src1,//第一個輸入數組 double alpha,//第一個輸入數組的權重 cv :: InputArray src2,//第二個輸入數組 double beta,//第二個輸入數組的權重 double gamma,//偏移加到加權和 cv :: OutputArray dst,//結果數組 int dtype = -1 //結果數組的輸出類型 ); ———————————————————————————————————————————————————————————————————————————— cv::bitwise_and() ; | 計算兩個數組的元素級位和 |——用法: void cv :: bitwise_and( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 ); ———————————————————————————————————————————————————————————————————————————— cv::bitwise_not() ; | 計算兩個數組的元素位級NOT |——用法: void cv :: bitwise_not( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組 cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 ); [注]若是你沒有使用面膜,也同樣 結果能夠經過矩陣運算來實現: ———————————————————————————————————————————————————————————————————————————— cv::bitwise_or() ; | 計算兩個數組的元素級OR |——用法: void cv :: bitwise_and( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 ); ———————————————————————————————————————————————————————————————————————————— cv::bitwise_xor() ; | 計算兩個數組的元素級比特級XOR |——用法: void cv :: bitwise_and( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 ); ———————————————————————————————————————————————————————————————————————————— cv::calcCovarMatrix() ; | 計算一組n維向量的協方差 |——用法: void cv :: calcCovarMatrix( const cv :: Mat * samples,// n-by-1或1-by-n矩陣的C-數組 int nsamples,//'samples'指向的num個矩陣 cv :: Mat&covar,// ref爲協方差返回數組 cv :: Mat&mean,// ref爲平均值返回數組 int flags,//特殊變體, int ctype = cv :: F64 // covar的輸出矩陣類型 ); 標誌參數中的標誌 含義 cv::COVAR_NORMAL 計算均值和協方差 cv::COVAR_SCRAMBLED 快速PCA「擾亂」協方差 cv::COVAR_USE_AVERAGE 使用mean做爲輸入而不是計算它 cv::COVAR_SCALE 從新縮放輸出協方差矩陣 cv::COVAR_ROWS 使用samples 輸入向量的行 cv::COVAR_COLS 使用samples 輸入向量列 ———————————————————————————————————————————————————————————————————————————— cv::cartToPolar() ; | 從二維矢量場計算角度和幅度 |——用法: void cv :: cartToPolar( cv :: InputArray x, cv :: InputArray y, cv :: OutputArray幅度, cv :: OutputArray角度, bool angleInDegrees = false ); ———————————————————————————————————————————————————————————————————————————— cv::checkRange() ; | 檢查數組是否有無效值 |——用法: bool cv :: checkRange( cv :: InputArray src, bool quiet = true, cv :: Point * pos = 0,//若是是非空的,則是第一個異常值的位置 double minVal = -DBL_MAX,//下限檢查(包括) double maxVal = DBL_MAX //上限檢查(不包括) ); ———————————————————————————————————————————————————————————————————————————— cv::compare() ; | 將所選比較運算符應用於兩個數組中的全部元素 |——用法: bool cv :: compare( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 int cmpop //比較運算符, ); cmp_op的值 對照 cv::CMP_EQ (src1i == src2i) cv::CMP_GT (src1i > src2i) cv::CMP_GE (src1i >= src2i) cv::CMP_LT (src1i < src2i) cv::CMP_LE (src1i <= src2i) cv::CMP_NE (src1i != src2i) 使用矩陣運算能夠實現這些相同的結果: dst = src1 == src2; dst = src1> src2; dst = src1> = src2; dst = src1 <src2; dst = src1 <= src2; dst = src1!= src2; ———————————————————————————————————————————————————————————————————————————— cv::completeSymm() | |——用法: bool cv :: completeSymm( cv :: InputArray mtx, bool lowerToUpper = false ); ———————————————————————————————————————————————————————————————————————————— cv::comvertScaleAbs(); | 縮放數組,取絕對值,而後轉換爲8位無符號 |——用法: void cv :: convertScaleAbs( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組 double alpha = 1.0,//乘法比例因子 double beta = 0.0 //附加偏移因子 ); 經過如下循環能夠實現相似的結果,具備更大的通用性: for(int i = 0; i <src.rows; i ++) for(int j = 0; j <src.cols * src.channels(); j ++) dst.at <dst_type>(i,j)= satuarate_cast <dst_type>( (double)src.at <src_type>(i,j)* alpha + beta ); ———————————————————————————————————————————————————————————————————————————— cv::countNonZero() ; | 計算數組中的非零元素 |——用法: int cv :: countNonZero(//返回mtx中非零元素的數量 cv :: InputArray mtx,//輸入數組 ); ———————————————————————————————————————————————————————————————————————————— cv::cvarrToMat() ; | 將2.1版以前的數組類型轉換爲cv::Mat |——用法: cv :: Mat cv :: cvarrToMat( const CvArr * src,//輸入數組:CvMat,IplImage或CvMatND bool copyData = false,//若是爲false則只生成新標題,不然複製數據 bool allowND = true,//若是爲true且可能,則將CvMatND轉換爲Mat int coiMode = 0 //若是0:若是COI設置則出錯,若是1:忽略COI ); ———————————————————————————————————————————————————————————————————————————— cv::dct() ; | 計算數組的離散餘弦變換 |——用法: void cv :: dct( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組 int flags,//用於逆變換或逐行 ); 性能cv::dct() 很大程度上取決於傳遞給它的數組的確切大小,而這種關係不是單調的。 只有一些尺寸比其餘尺寸更好。建議在將數組傳遞給時cv::dct() ,首先肯定大於數組的最佳大小,而後將數組擴展到該大小。 OpenCV提供了一個方便的例程來爲您計算這些值,稱爲cv::getOptimalDFTSize() 。 實現時, 經過計算長度爲n的向量的離散餘弦變換cv::dft() 長度爲n / 2的向量上 的離散傅里葉變換() 。 這意味着要得到調用的最佳大小cv::dct() ,您應該像這樣計算它: size_t opt_dft_size = 2 * cv :: getOptimalDFTSize((N + 1)/ 2); ———————————————————————————————————————————————————————————————————————————— cv::determinant() ; | 計算方陣的行列式 |——用法: double cv :: determinant( cv :: InputArray mat ); cv::determinant() 計算正方形數組的行列式。 該數組必須是其中一種浮點數據類型,而且必須是單通道。若是矩陣很小,則行列式由標準公式直接計算。 對於大矩陣, 這不是有效的,所以行列式是經過高斯消元法計算的 。 ———————————————————————————————————————————————————————————————————————————— cv::cvtColor() ; | 轉換顏色空間(通道數) |——用法: void cv :: cvtColor( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組 int code,//顏色映射代碼, int dstCn = 0 //輸出中的通道(0 ='自動') ); 【經過cv :: cvtColor()提供的轉換】 ————————————————————————————————————————— 轉換代碼 含義 ————————————————————————————————————————— CV :: COLOR_BGR2RGB CV :: COLOR_RGB2BGR CV :: COLOR_RGBA2BGRA CV :: COLOR_BGRA2RGBA ————————————————————————————————————————— 在RGB和BGR顏色空間之間轉換(帶或不帶alpha通道) CV :: COLOR_RGB2RGBA CV :: COLOR_BGR2BGRA ————————————————————————————————————————— 將Alpha通道添加到RGB或BGR圖像 CV :: COLOR_RGBA2RGB CV :: COLOR_BGRA2BGR ————————————————————————————————————————— 從RGB或BGR圖像中刪除Alpha通道 在添加或刪除Alpha通道時將RGB轉換爲BGR顏色空間 CV :: COLOR_RGB2GRAY CV :: COLOR_BGR2GRAY ————————————————————————————————————————— 將RGB或BGR顏色空間轉換爲灰度 CV :: COLOR_GRAY2RGB CV :: COLOR_GRAY2BGR CV :: COLOR_RGBA2GRAY CV :: COLOR_BGRA2GRAY ————————————————————————————————————————— 將灰度轉換爲RGB或BGR顏色空間(可選擇刪除過程當中的Alpha通道) CV :: COLOR_GRAY2RGBA CV :: COLOR_GRAY2BGRA ————————————————————————————————————————— 將灰度轉換爲RGB或BGR顏色空間並添加Alpha通道 CV :: COLOR_RGB2BGR565 CV :: COLOR_BGR2BGR565 CV :: COLOR_BGR5652RGB CV :: COLOR_BGR5652BGR CV :: COLOR_RGBA2BGR565 CV :: COLOR_BGRA2BGR565 CV :: COLOR_BGR5652RGBA CV :: COLOR_BGR5652BGRA ————————————————————————————————————————— 經過可選添加或刪除Alpha通道(16位圖像)從RGB或BGR顏色空間轉換爲BGR565顏色表示 CV :: COLOR_GRAY2BGR565 CV :: COLOR_BGR5652GRAY ————————————————————————————————————————— 將灰度轉換爲BGR565顏色表示,反之亦然(16位圖像) CV :: COLOR_GRAY2BGR565 CV :: COLOR_BGR5652GRAY ————————————————————————————————————————— 將灰度轉換爲BGR565顏色表示,反之亦然(16位圖像) CV :: COLOR_RGB2BGR555 CV :: COLOR_BGR2BGR555 CV :: COLOR_BGR5552RGB CV :: COLOR_BGR5552BGR CV :: COLOR_RGBA2BGR555 CV :: COLOR_BGRA2BGR555 CV :: COLOR_BGR5552RGBA CV :: COLOR_BGR5552BGRA ————————————————————————————————————————— 從RGB或BGR顏色空間轉換爲BGR555顏色表示,可選擇添加或刪除Alpha通道(16位圖像) CV :: COLOR_GRAY2BGR555 CV :: COLOR_BGR5552GRAY ————————————————————————————————————————— 將灰度轉換爲BGR555顏色表示,反之亦然(16位圖像) CV :: COLOR_RGB2XYZ CV :: COLOR_BGR2XYZ CV :: COLOR_XYZ2RGB CV :: COLOR_XYZ2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲CIE XYZ表示,反之亦然(Rec 709,D65白點) CV :: COLOR_RGB2YCrCb CV :: COLOR_BGR2YCrCb CV :: COLOR_YCrCb2RGB CV :: COLOR_YCrCb2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲亮度 - 色度(也稱爲YCC)顏色表示,反之亦然 CV :: COLOR_BGR2YCrCb CV :: COLOR_YCrCb2RGB CV :: COLOR_YCrCb2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲亮度 - 色度(也稱爲YCC)顏色表示,反之亦然 CV :: COLOR_RGB2HSV CV :: COLOR_BGR2HSV CV :: COLOR_HSV2RGB CV :: COLOR_HSV2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲HSV(色調飽和度值)顏色表示,反之亦然 CV :: COLOR_RGB2HLS CV :: COLOR_BGR2HLS CV :: COLOR_HLS2RGB CV :: COLOR_HLS2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲HLS(色調亮度飽和度)顏色表示,反之亦然 CV :: COLOR_RGB2Lab CV :: COLOR_BGR2Lab CV :: COLOR_Lab2RGB CV :: COLOR_Lab2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲CIE Lab顏色表示,反之亦然 CV :: COLOR_RGB2Luv CV :: COLOR_BGR2Luv CV :: COLOR_Luv2RGB CV :: COLOR_Luv2BGR ————————————————————————————————————————— 將RGB或BGR圖像轉換爲CIE Luv顏色表示,反之亦然 CV :: COLOR_BayerBG2RGB CV :: COLOR_BayerGB2RGB CV :: COLOR_BayerRG2RGB CV :: COLOR_BayerGR2RGB CV :: COLOR_BayerBG2BGR CV :: COLOR_BayerGB2BGR CV :: COLOR_BayerRG2BGR CV :: COLOR_BayerGR2BGR ————————————————————————————————————————— 從拜耳模式(單通道)轉換爲RGB或BGR圖像 CV :: COLOR_BayerGB2BGR CV :: COLOR_BayerRG2BGR CV :: COLOR_BayerGR2BGR ———————————————————————————————————————————————————————————————————————————— cv::dft() ; | 計算陣列的離散傅里葉變換 |——用法: void cv :: dft( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組 int flags = 0,//用於逆變換或逐行 int nonzeroRows = 0 //只有這麼多條目非零 ); 性能cv::dft() 很大程度上取決於傳遞給它的數組的確切大小,而這種關係不是單調的。 只有一些尺寸比其餘尺寸更好。建議在將數組傳遞給時cv::dft(), 首先肯定大於數組的最佳大小,而後將數組擴展到該大小。 OpenCV提供了一個方便的例程來爲您計算這些值,稱爲cv::getOptimalDFTSize() 。 ———————————————————————————————————————————————————————————————————————————— cv::divide() ; | 執行一個數組的元素劃分 |——用法: void cv :: divide( cv :: InputArray src1,//第一個輸入數組(分子) cv :: InputArray src2,//第二個輸入數組(分母) cv :: OutputArray dst,//結果數組(scale * src1 / src2) double scale = 1.0,//乘法比例因子 int dtype = -1 // dst數據類型,-1從src2獲取 ); void cv :: divide( double,//全部分區的分子 cv :: InputArray src2,//輸入數組(分母) cv :: OutputArray dst,//結果數組(scale / src2) int dtype = -1 // dst數據類型,-1從src2獲取 ); ———————————————————————————————————————————————————————————————————————————— cv::eigen() ; | 計算方陣的特徵值和特徵向量 |——用法: bool cv :: eigen( cv :: InputArray src, cv :: OutputArray特徵值, int lowindex = -1, int highindex = -1 ); bool cv :: eigen( cv :: InputArray src, cv :: OutputArray特徵值, cv :: OutputArray特徵向量, int lowindex = -1, int highindex = -1 ); 給定對稱 矩陣mat ,cv::eigen() 將計算 該 矩陣的特徵向量 和特徵值。 ———————————————————————————————————————————————————————————————————————————— cv::exp(); | 計算數組的逐元素取冪 |——用法: void cv :: exp( cv :: InputArray src, cv :: OutputArray dst ); cv::exp()對src中的全部元素進行指數化,並將結果放入dst。。 ———————————————————————————————————————————————————————————————————————————— cv::extractImageCOI(); | 從2.1版以前的陣列類型中提取單個通道 |——用法: bool cv::extractImageCOI( const CvArr* arr, cv::OutputArray dst, int coi = -1 ); ———————————————————————————————————————————————————————————————————————————— cv::flip() ; | 翻轉所選軸的陣列 |——用法: void cv :: flip( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組,'src'的大小和類型 int flipCode = 0 //> 0:y-flip,0:x-flip,<0:both ); 此功能翻轉圖像 圍繞x 軸,y 軸或二者。默認狀況下,flipCode 設置爲0 ,在x 軸周圍翻轉。 若是flipCode 設置大於零(例如,+1 ),則圖像將圍繞y 軸翻轉, 而且若是設置爲負值(例如,–1 ),則圖像將圍繞兩個軸翻轉。 在Win32系統上進行視頻處理時,您會發現本身常用此功能在圖像格式之間切換,其原點位於圖像的左上角和左下角。 ———————————————————————————————————————————————————————————————————————————— cv::gemm() ; | 執行廣義矩陣乘法 |——用法: void cv :: gemm( cv::InputArray src1,//第一個輸入數組 cv::InputArray src2,//第二個輸入數組 double alpha,//'src1'*'src2'產品的重量 cv::InputArray src3,//第三個(偏移)輸入數組 double beta,//'src3'數組的權重 cv::OutputArray dst,//結果數組 int flags = 0 //用於轉置源數組 ); 其中src一、src2和src3是矩陣,α和β是數值係數,op()是所附矩陣的可選換位。 轉置由可選的參數標誌控制,這些標誌能夠是0,也能夠是cv::gemm_1_t、cv::gemm_2_t 和cv::gemm_3_t的任意組合(經過布爾或),每一個標誌表示對應矩陣的轉置。 ———————————————————————————————————————————————————————————————————————————— cv::getConvertElem() | 得到單像素類型轉換功能 |——用法: cv :: convertData cv :: getConvertElem(//返回轉換函數(以下) int fromType,//輸入像素類型(例如,cv :: U8) int toType //輸出像素類型(例如,CV_32F) ); ———————————————————————————————————————————————————————————————————————————— cv::getConvertScaleElem() | 得到單像素類型轉換和縮放功能 |——用法: cv :: convertScaleData cv :: getConvertScaleElem(//返回轉換函數 int fromType,//輸入像素類型(例如,cv :: U8) int toType //輸出像素類型(例如,CV_32F) ); //轉換函數具備如下形式: // typedef void(* ConvertData)( const void * from,//指向輸入像素位置的指針 void * to,//指向結果像素位置的指針 int cn //頻道數量 ); typedef void(* ConvertScaleData)( const void * from,//指向輸入像素位置的指針 void * to,//指向結果像素位置的指針 int cn,//通道數 double alpha,//比例因子 double beta //偏移因子 ); 該 函數cv::getConvertElem()和cv::getConvertScaleElem()返回函數 指向OpenCV中用於特定類型轉換的函數。 返回的函數cv::getConvertElem() 被定義(via typedef )到類型cv::ConvertData, 該類型能夠傳遞指向兩個數據區域和多個「通道」的指針。 通道的數量由cn 轉換函數的參數給出,這其實是數字fromType 要轉換的連續內存對象。 這意味着您能夠經過簡單地設置通道數等於數組中元素總數來轉換整個(連續內存中)數組。 ———————————————————————————————————————————————————————————————————————————— cv::idct() ; | 計算陣列的逆離散餘弦變換 |——用法: void cv :: idct( cv :: InputArray src,//輸入數組 cv :: OutputArray dst,//結果數組 int flags,//用於逐行 ); cv::idct() 是 只是一個方便的速記 反離散餘弦變換。 調用cv::idct() 徹底等同於cv::dct() 使用參數調用: cv :: dct(src,dst,flags | cv :: DCT_INVERSE); ———————————————————————————————————————————————————————————————————————————— cv::idft() ; | 計算陣列的離散傅里葉逆變換 |——用法: cv::idft()只是一個方便的簡寫 逆離散傅立葉變換。 回調cv::idft() 是徹底正確的 至關於cv::dft() 使用參數調用: ———————————————————————————————————————————————————————————————————————————— cv::inRange() ; | 測試數組的元素是否在兩個其餘數組以內 |——用法: void cv :: inRange( cv :: InputArray src,//輸入數組 cv :: InputArray upperb,//上限數組(含) cv :: InputArray lowerb,//下界數組(含) cv :: OutputArray dst //結果數組,cv :: U8C1類型 ); CV :: insertImageCOI() ———————————————————————————————————————————————————————————————————————————— cv::insertImageCOI() ; | 重新型Mat對象獲取數據並將該數據寫入遺留陣列的一個特定通道。 |——用法: void cv::insertImageCOI( cv::InputArray img,//輸入數組,單通道 CvArr * arr,// Legacy(pre v2.1)輸出數組 int coi = -1 //目標通道 ); 旨在幫助咱們使用相似IplImage 和的傳統(pre-v2.1)數組CvMat 。 其目的是容許咱們重新型C ++ cv::Mat 對象獲取數據並將該數據寫入遺留陣列的一個特定通道。 輸入img 應該是單通道cv::Mat 對象,而輸入arr 應該是多通道遺留對象。 二者的大小必須相同。數據img 將被複制到coi 通道上arr 。 ———————————————————————————————————————————————————————————————————————————— cv::invert() ; | 反轉方陣 |——用法: double cv :: invert(//若是'src'是單數,則返回0 cv :: InputArray src,//輸入數組,m-by-n cv :: OutputArray dst //結果數組,n-by-m int method = cv :: DECOMP_LU //(僞)逆的方法 ); cv::invert() 將矩陣反轉src 並放置 結果dst 。輸入數組必須是浮點類型,結果數組的類型相同。 由於cv::invert() 包括計算僞逆的可能性,輸入數組沒必要是方形的。 若是輸入數組是n × m ,則結果數組將是m × n 。 此函數支持幾種計算逆矩陣的方法,但默認爲高斯消元法。返回值取決於使用的方法。 【cv :: invert()的方法參數的可能值】 方法參數的值 含義 cv::DECOMP_LU 高斯消元(LU分解) cv::DECOMP_SVD 奇異值分解(SVD) cv::DECOMP_CHOLESKY 僅適用於對稱正矩陣 ———————————————————————————————————————————————————————————————————————————— cv::log() ; | 計算元素的元素天然對數 |——用法: void cv :: log( cv :: InputArray src, cv :: OutputArray dst ); cv::log() 計算天然 記錄元素src1並將結果放入dst。 小於或等於零的源像素標記爲設置爲較大負值的目標像素。 ———————————————————————————————————————————————————————————————————————————— cv::magnitude(); | 從二維矢量場計算大小 |——用法: void cv::magnitude( cv::InputArray x, cv::InputArray y, cv::OutputArray dst ); cv::marize()基本上計算二維向量場上笛卡爾到極座標轉換的徑向部分。 在cv::Magnitude()的狀況下,這個向量場應該是兩個單獨的單通道陣列的形式。 這兩個輸入數組的大小應該相同。(若是您有一個雙通道數組,cv::split()將爲您提供單獨的通道) dst中的每一個元素都是根據x和y的對應元素做爲這兩個元素的歐幾里得範數(即對應值平方和的平方根)來計算的。 ———————————————————————————————————————————————————————————————————————————— cv::LUT() ; | 將數組轉換爲查找表的索引 |——用法: void cv::LUT( cv::InputArray src, cv::InputArray lut, cv::OutputArray dst ); 該功能cv::LUT() 執行 一個「查找錶轉換」 該 輸入src 。 cv::LUT() 要求源數組src 爲8位索引值。該lut 數組包含查找表。 該查找表數組應該具備剛好256個元素,而且能夠具備單個通道, 或者在多通道src 陣列的狀況下,具備與源陣列相同數量的通道。cv::LUT()。 而後,該函數 使用相應的值 做爲該表的索引,使用dst 從查找表中獲取的值填充目標數組。 ———————————————————————————————————————————————————————————————————————————— cv::Mahalanobis() ; | 計算兩個向量之間的Mahalanobis距離 |——用法: cv :: Size cv :: mahalanobis( cv :: InputArray vec1, cv :: InputArray vec2, cv :: OutputArray icovar ); ———————————————————————————————————————————————————————————————————————————— cv::max(); | 計算兩個數組之間的元素最大值 |——用法: cv :: MatExpr cv :: max( const cv :: Mat&src1,//第一個輸入數組(第一個位置) const cv :: Mat&src2 //第二個輸入數組 ); MatExpr cv :: max(//矩陣表達式,不是矩陣 const cv :: Mat&src1,//第一個輸入數組(第一個位置) double value //第二個位置的標量 ); MatExpr cv :: max(//矩陣表達式,不是矩陣 double value,//第一個位置的標量 const cv :: Mat&src1 //輸入數組(第二個位置) ); void cv :: max( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst //結果數組 ); void cv :: max( const Mat&src1,//第一個輸入數組 const Mat&src2,//第二個輸入數組 Mat&dst //結果數組 ); void cv :: max( const Mat&src1,//輸入數組 double value,//標量輸入 Mat&dst //結果數組 ); cv::max() 計算每一個相應的一對陣列中的像素的最大值src1 和src2 。 它有兩種基本形式:返回矩陣表達式的那些以及計算結果並將其放在您指示的位置的那些。 在三參數形式中,在其中一個操做數是a的狀況下cv::Scalar, 與多通道陣列的比較是在每一個通道的基礎上用相應的組件完成的cv::Scalar。 ———————————————————————————————————————————————————————————————————————————— cv::mean() ; | 計算數組元素的平均值 |——用法: cv :: Scalar cv :: mean( cv :: InputArray src, cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 ); 該函數cv::mean()計算全部的平均值輸入數組src 中未被屏蔽的像素數。 若是src 是多通道,則基於每一個通道計算結果。 ———————————————————————————————————————————————————————————————————————————— cv::meadStdDev() ; | 計算數組元素的平均值和標準差 |——用法: void cv :: meanStdDev( cv :: InputArray src, cv :: OutputArray的意思是, cv :: OutputArray stddev, cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 ); 該函數cv::meanStdDev() 計算平均值 輸入數組src中未被屏蔽的像素值,以及它們的標準誤差。 若是src 是多通道,則基於每一個通道計算平均值和標準誤差。 ———————————————————————————————————————————————————————————————————————————— cv::merge() ; | 將多個通道陣列合併爲一個多通道陣列 |——用法: void cv :: merge( const cv :: Mat * mv,// C風格的數組數組 size_t count,//'mv'指向的數組數 cv :: OutputArray dst //包含'mv'中的全部通道 ); void merge( const vector <cv :: Mat>&mv,// STL樣式的數組數組 cv :: OutputArray dst //包含'mv'中的全部通道 ); ———————————————————————————————————————————————————————————————————————————— cv::min() ; | 計算兩個數組之間元素最小值 |——用法: cv :: MatExpr cv :: min(//矩陣表達式,不是矩陣 const cv :: Mat&src1,//第一個輸入數組 const cv :: Mat&src2 //第二個輸入數組 ); MatExpr cv :: min(//矩陣表達式,不是矩陣 const cv :: Mat&src1,//第一個輸入數組(第一個位置) double value //第二個位置的標量 ); MatExpr cv :: min(//矩陣表達式,不是矩陣 double value,//第一個位置的標量 const cv :: Mat&src1 //輸入數組(第二個位置) ); void cv::min( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst //結果數組 ); void cv :: min( const Mat&src1,//第一個輸入數組 const Mat&src2,//第二個輸入數組 Mat&dst //結果數組 ); void cv :: min( const Mat&src1,//輸入數組 double value,//標量輸入 Mat&dst //結果數組 ); ———————————————————————————————————————————————————————————————————————————— cv::minMaxIdx() ; | |——用法: void cv :: minMaxIdx( cv :: InputArray src,//輸入數組,僅限單通道 double * minVal,// min值到這裏(非NULL) double * maxVal,// min值到這裏(非NULL) int * minIdx,// loc的min在這裏(若是不是NULL) int * maxIdx,//最大值的loc在這裏(若是不是NULL) cv :: InputArray mask = cv :: noArray()//僅搜索非零值 ); void cv :: minMaxIdx( const cv :: SparseMat&src,//輸入稀疏數組 double * minVal,// min值到這裏(非NULL) double * maxVal,// min值到這裏(非NULL) int * minIdx,// C樣式數組,min locs的索引 int * maxIdx,// C樣式數組,max locs的索引 ); cv::minMaxIdx() 也能夠用一個被稱爲cv::SparseMat 對所述src 陣列。 在這種狀況下,陣列能夠具備任意數量的維度,而且將計算最小值和最大值並返回它們的位置。 在這種狀況下,極值的位置將被返回,並放置在C語言風格的陣列minLoc 和maxLoc 。 這兩個數組(若是提供)應該具備與src 數組中維數相同的元素數。 在這種狀況下cv::SparseMat ,最小值和最大值僅針對源代碼中一般稱爲非零元素的內容計算; 然而,這個術語有點誤導,由於真正意味着存在的元素在內存中的稀疏矩陣表示中。 事實上,因爲稀疏矩陣是如何造成的,以及過去對它作了什麼,可能存在而且也是零的元素。 這些元素將包括在最小值和最大值的計算中。 【waring】 提供單維數組時,位置的數組仍必須爲兩個整數分配內存。 這是由於cv::minMaxLoc() 使用這樣的慣例,即便是一維數組本質上也是N ×1矩陣。 在這種狀況下,返回的第二個值對於每一個位置始終爲0。 ———————————————————————————————————————————————————————————————————————————— cv::minMaxLoc() ; | 查找數組中的最大值和最小值 |——用法: void cv :: minMaxLoc( cv :: InputArray src,//輸入數組 double * minVal,// min值到這裏(非NULL) double * maxVal,// min值到這裏(非NULL) cv :: Point * minLoc,// loc的min在這裏(若是不是NULL) cv :: Point * maxLoc,//最大值的loc在這裏(若是不是NULL) cv :: InputArray mask = cv :: noArray()//僅搜索非零值 ); void cv :: minMaxLoc( const cv :: SparseMat&src,//輸入稀疏數組 double * minVal,// min值到這裏(非NULL) double * maxVal,// min值到這裏(非NULL) cv :: Point * minLoc,// C風格的數組,最小值的索引 cv :: Point * maxLoc,// C風格的數組,最大值的索引 ); 這個例程找到了 數組中的最小值和最大值,src 並(可選)返回其位置。 計算出的最小值和最大值分別放在minVal 和中maxVal 。可選地,也能夠返回那些極值的位置。 這些位置將寫入由minLoc和給出的地址maxLoc(假設這些參數不是NULL )。 由於這些位置是類型的cv::Point,因此這種形式的函數應該僅用於二維數組(即矩陣或圖像)。 ———————————————————————————————————————————————————————————————————————————— cv::mixChannels() ; | 從輸入數組到輸出數組的通道 |——用法: void cv :: mixChannels( const cv :: Mat * srcv,// C風格的矩陣數組 int nsrc,//'srcv'中的元素數 cv :: Mat * dstv,// C風格的目標矩陣數組 int ndst,//'dstv'中的元素數 const int * fromTo,// C風格的數組對,......從...到... size_t n_pairs //'fromTo'中的對數 ); void cv :: mixChannels( const vector <cv :: Mat>&srcv,// STL樣式的矩陣向量 vector <cv :: Mat>&dstv,//目標矩陣的STL樣式向量 const int * fromTo,// C風格的數組對,......從...到... size_t n_pairs //'fromTo'中的對數 ); OpenCV中有許多操做是從輸入中的一個或多個圖像從新排列通道的通常問題的特殊狀況, 並將它們分類到輸出中的一個或多個圖像中的特定通道中。 像cv::split() ,cv::merge() 和(至少某些狀況)cv::cvtColor()這樣的函數都使用這樣的功能。 這些方法經過調用更爲通用的方式來完成他們須要作的事情cv::mixChannels() 。 ———————————————————————————————————————————————————————————————————————————— cv::mulSpectrums() ; | 計算兩個傅里葉光譜的元素乘法 |——用法: doublevoid cv :: mulSpectrums( cv :: InputArray arr1,//第一個輸入數組 cv :: InputArray arr2,//第二個輸入數組,大小與'arr1'相同 cv :: OutputArray dst,//結果數組,大小與'arr1'相同 int flags,//用於表示獨立的行 bool conj = false //若是爲true,則先綁定arr2 ); 在許多業務中 涉及 光譜(即,cv::dft() 或的結果cv::idft()), 人們但願進行每元素乘法,其考慮光譜的包裝(實數陣列),或者它們做爲復變量的性質。 輸入數組能夠是一維或二維,第二個與第一個相同,大小和類型相同。 若是輸入陣列是二維的,則它能夠被認爲是真正的二維光譜,或者是一維光譜的陣列(每行一個)。 在後一種狀況下,flags 應設置爲cv::DFT_ROWS ; 不然能夠設置爲0 。 當兩個數組很複雜時,它們只是在逐個元素的基礎上相乘, 但cv::mulSpectrums()提供了在乘法以前共軛第二個數組元素的選項。 例如,您可使用此選項執行相關(使用傅里葉變換),但對於卷積,您可使用conj=false 。 ———————————————————————————————————————————————————————————————————————————— cv::multiply() ; | 執行兩個數組的逐元素乘法 |——用法: void cv :: multiply( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 double scale = 1.0,//總體比例因子 int dtype = -1 //結果數組的輸出類型 ); cv::multiply() 是一個簡單的乘法函數; 它將元素乘以src1 相應的元素src2 並將結果放入dst 。 ———————————————————————————————————————————————————————————————————————————— cv::mulTransposed() ; | 計算一個數組的矩陣乘積 |——用法: void cv :: mulTransposed( cv :: InputArray src1,//輸入矩陣 cv :: OutputArray dst,//結果數組 bool aTa,//若是爲真,則轉置而後相乘 cv :: InputArray delta = cv :: noArray(),//在乘法以前減去'src1' double scale = 1.0,//總體比例因子 int dtype = -1 //結果數組的輸出類型 ); cv::mulTransposed() 用於計算產品 矩陣及其自身的轉置-例如,在計算協方差時頗有用。 矩陣src 應該是二維和單通道的,但不像cv::GEMM(),它不限於浮點類型。 除非另有說明,不然結果矩陣將與源矩陣的類型相同dtype 。 若是dtype 不是否認的(默認),則應爲CV_32F 或cv::F64 ; dst 而後輸出數組將是指定的類型。 ———————————————————————————————————————————————————————————————————————————— cv::norm() ; | 計算兩個數組之間的歸一化相關性 |——用法: double cv :: norm(//以double精度返回norm cv :: InputArray src1,//輸入矩陣 int normType = cv :: NORM_L2,//要計算的範數類型 cv :: InputArray mask = cv :: noArray()//爲非零值(若是存在)執行 ); double cv :: norm(//返回計算的差別範數 cv :: InputArray src1,//輸入矩陣 cv :: InputArray src2,//第二個輸入矩陣 int normType = cv :: NORM_L2,//要計算的範數類型 cv :: InputArray mask = cv :: noArray()//爲非零值(若是存在)執行 ); double cv :: norm( const cv :: SparseMat&src,//輸入稀疏矩陣 int normType = cv :: NORM_L2,//要計算的範數類型 ); 該cv::norm()函數用於計算範數 若是提供了兩個數組,則數組或兩個數組之間的各類距離範數。 cv::SparseMat 也能夠計算a的範數,在這種狀況下,在規範的計算中忽略零條目。 ———————————————————————————————————————————————————————————————————————————— cv::normalize() ; | 將數組中的元素規範化爲某個值 |——用法: void cv :: normalize( cv :: InputArray src1,//輸入矩陣 cv :: OutputArray dst,//結果矩陣 double alpha = 1,//第一個參數 double beta = 0,//第二個參數 int normType = cv :: NORM_L2,//要計算的範數類型 int dtype = -1 //結果數組的輸出類型 cv :: InputArray mask = cv :: noArray()//爲非零值(若是存在)執行 ); void cv :: normalize( const cv :: SparseMat&src,//輸入稀疏矩陣 cv :: SparseMat&dst,//結果稀疏矩陣 double alpha = 1,//第一個參數 int normType = cv :: NORM_L2,//要計算的範數類型 ); 與許多OpenCV功能同樣,cv::normalize() 它比最初出現時更多。 根據值normType ,圖像src 被標準化或以其餘方式映射到特定範圍內dst 。 除非使用 參數,不然該數組dst 的大小src與數據類型相同,而且具備相同的數據類型dtype。 可選地,dtype 能夠設置爲OpenCV基本類型之一(例如,CV_32F ), 而且輸出數組將是該類型。此操做的確切含義取決於normType 參數。 ———————————————————————————————————————————————————————————————————————————— cv::normalize() ; | 將數組中的元素規範化爲某個值 |——用法: void cv :: normalize( cv :: InputArray src1,//輸入矩陣 cv :: OutputArray dst,//結果矩陣 double alpha = 1,//第一個參數(見下表) double beta = 0,//第二個參數 int normType = cv :: NORM_L2,//要計算的範數類型 int dtype = -1 //結果數組的輸出類型 cv :: InputArray mask = cv :: noArray()//爲非零值(若是存在)執行 ); void cv :: normalize( const cv :: SparseMat&src,//輸入稀疏矩陣 cv :: SparseMat&dst,//結果稀疏矩陣 double alpha = 1,//第一個參數(見表) int normType = cv :: NORM_L2,//要計算的範數類型 ); ———————————————————————————————————————————————————————————————————————————— cv::perspectiveTransform() | 執行向量列表的透視矩陣變換 |——用法: void cv :: perspectiveTransform( cv :: InputArray src,//輸入數組,2或3個通道 cv :: OutputArray dst,//結果數組,大小,類型,如src1 cv :: InputArray mtx // 3-by-3或4-by-4 transoform矩陣 ); 該cv::perspectiveTransform() 功能執行 點列表(不是像素)的平面投影變換。 輸入陣列應爲兩通道或三通道陣列mtx ,在這兩種狀況下矩陣應分別爲3×3或4×4。 cv::perspectiveTransform() 所以src,首先將每一個元素轉換爲關於它的長度向量src.channels() + 1 , 其中附加維度(投影維度)最初設置爲1.0 。這個是也稱爲齊次座標 。 而後將每一個擴展矢量乘以mtx而且經過(新)投影座標7的值從新調整結果 (而後將其丟棄,由於它老是在該操做以後)。 請再次注意,此例程用於轉換點列表,而不是圖像轉換。 若是要對圖像應用透視變換,其實是要求不變換單個像素, 而是將它們從圖像中的一個位置移動到另外一個位置。 若是你想解決逆問題,找到最可能的透視變換給定多對對應點, 使用cv::getPerspectiveTransform()或cv::findHomography() 。 ———————————————————————————————————————————————————————————————————————————— cv::phase() ; | 從二維矢量場計算方向 |——用法: void cv :: phase( cv :: InputArray x,//輸入x-components數組 cv :: InputArray y,//輸入y份量數組 cv :: OutputArray dst,//輸出角度數組(弧度) bool angleInDegrees = false //度(若是爲真),弧度(若是爲假) ); ———————————————————————————————————————————————————————————————————————————— cv::polarToCart() ; | 從角度和大小計算二維矢量場 |——用法: void cv :: polarToCart( cv :: InputArray magnitude,//輸入幅度數組 cv :: InputArray angle,//輸入角度數組 cv :: OutputArray x,// x組件的輸出數組 cv :: OutputArray y,// y組件的輸出數組 bool angleInDegrees = false //度(若是爲true)弧度(若是爲false) ); ———————————————————————————————————————————————————————————————————————————— cv::pow() ; | 將數組的每一個元素提高到給定的冪 |——用法: void cv :: pow( cv :: InputArray src,//輸入數組 double p,//求冪的冪 cv :: OutputArray dst //結果數組 ); 該函數cv::pow() 計算 由給定功率對陣列的元素取冪p。 在p 整數的狀況下,直接計算功率。對於非p 整數,首先計算源值的絕對值, 而後將其提升到冪p (所以僅返回實數值)。 對於某些特殊值p,例如整數值或±½,使用特殊算法,從而加快計算速度 。 ———————————————————————————————————————————————————————————————————————————— cv::randu() ; | 使用均勻分佈的隨機數填充到給定數組 |——用法: template <typename _Tp> _Tp randu(); //返回特定類型的隨機數 void cv :: randu( cv :: InputOutArray mtx,//全部值都是隨機的 cv :: InputArray low,// minimum,1-by-1(Nc = 1,4)或1-by-4(Nc = 1) cv :: InputArray high // maximum,1-by-1(Nc = 1,4)或1-by-4(Nc = 1) ); ———————————————————————————————————————————————————————————————————————————— cv::randn() ; | 使用正態分佈的隨機數填充到給定數組 |——用法: void cv :: randn( cv :: InputOutArray mtx,//全部值都是隨機的 cv :: InputArray mean,// mean mean,array在channel space中 cv :: InputArray stddev //標準誤差,通道空間 ); ———————————————————————————————————————————————————————————————————————————— cv::randShuffle() ; | 隨機洗牌數組元素 |——用法: void cv :: randShuffle( cv :: InputOutArray mtx,//全部值都將被洗牌 double iterFactor = 1,//重複隨機播放的次數 cv :: RNG * rng = NULL //你本身的發電機,若是你願意的話 ); cv::randShuffle() 試圖隨機化 經過選擇隨機元素對並交換它們的位置,在一維數組中輸入條目。 此類交換的數量等於數組的mtx 大小乘以可選因子iterFactor 。 任選地,一個隨機數生成器能夠被提供。 若是未提供,theRNG() 則將自動使用默認隨機數生成器。 ———————————————————————————————————————————————————————————————————————————— cv::reduce() ; | 經過給定操做將二維數組減小爲向量 |——用法: void cv :: reduce( cv :: InputArray src,//輸入,n-by-m,2維 cv :: OutputArray vec,//輸出,1-by-m或n-by-1 int dim,//減小方向0 =行,1 = col int reduceOp = cv :: REDUCE_SUM,//減小操做 int dtype = -1 //結果數組的輸出類型 ); reduceOp參數選擇簡化運算符 op的價值 結果 cv::REDUCE_SUM 跨矢量計算和 cv::REDUCE_AVG 計算向量的平均值 cv::REDUCE_MAX 跨矢量計算最大值 cv::REDUCE_MIN 計算矢量的最小值 cv :: reduce()中的dim參數控制縮減的方向 昏暗的價值 結果 0 摺疊成一行 1 摺疊到單個列 cv::reduce() 支持任何類型的多通道數組。使用dtype ,您能夠爲其指定替代類型dst 。 ———————————————————————————————————————————————————————————————————————————— cv::repeat() ; | 將一個數組的內容平鋪到另外一個數組中 |——用法: void cv :: repeat( cv :: InputArray src,//輸入二維數組 int nx,//沿x方向複製 int ny,//在y方向複製 cv :: OutputArray dst //結果數組 ); cv :: Mat cv :: repeat(//返回結果數組 cv :: InputArray src,//輸入二維數組 int nx,//沿x方向複製 int ny //在y方向複製 ); ———————————————————————————————————————————————————————————————————————————— cv::saturate-cast<>(); | 轉換爲基元類型(模板函數) |——用法: ———————————————————————————————————————————————————————————————————————————— cv::ScaleAdd() ; | 計算兩個數組的元素總和,並可選擇縮放第一個數組 |——用法: void cv :: scaleAdd( cv :: InputArray src1,//第一個輸入數組 double scale,//應用於第一個數組的比例因子 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 ); cv::scaleAdd() 習慣了 計算兩個數組的總和, src1並在總和完成以前將src2比例因子scale應用於第一個數組。結果放在數組中dst。 [注意]使用矩陣代數運算能夠得到相同的結果: dst = scale * src1 + src2; ———————————————————————————————————————————————————————————————————————————— cv::setIdentity() ; | 將數組的全部元素的對角線設置爲1,不然設置爲0。 |——用法: void cv :: setIdentity( cv :: InputOutputArray dst,//用於重置值的數組 const cv :: Scalar&value = cv :: Scalar(1.0)//應用於對角線元素 ); cv::setIdentity() 設置全部元素0 除了行和列相等的元素以外的數組; 這些元素設置爲1(或value 提供)。cv::setIdentity()支持全部數據類型,而且不要求數組爲正方形。 ———————————————————————————————————————————————————————————————————————————— cv::solve() ; | 求解線性方程組 |——用法: int cv :: solve( cv :: InputArray lhs,//系統的左側,n-by-n cv :: InputArray rhs,//系統的右側,n-by-1 cv :: OutputArray dst,// Results數組,將是n-by-1 int method = cv :: DECOMP_LU //求解器的方法 ); 該功能cv::solve()提供了快速解決線性系統的方法cv::invert() 。 ———————————————————————————————————————————————————————————————————————————— cv::solveCubic() ; | 找到(惟一的)三次方程的實根 |——用法: int cv :: solveCubic( cv :: InputArray coeffs, cv :: OutputArray根 ); ———————————————————————————————————————————————————————————————————————————— cv::solvePoly() ; | 找到多項式方程的復根 |——用法: int cv :: solvePoly( cv :: InputArray coeffs, cv :: OutputArray roots //複雜根(2通道) int maxIters = 300 //解算器的最大迭代次數 ); ———————————————————————————————————————————————————————————————————————————— cv::sort() ; | 對數組中的行或列中的元素進行排序 |——用法: void cv :: sort( cv :: InputArray src, cv :: OutputArray dst, int flags ); OpenCV排序函數用於二維數組。僅支持單通道源陣列。 您不該該將此視爲在電子表格中對行或列進行排序;cv::sort() 排序每行或列分開 。 排序操做的結果將是一個新數組dst ,其大小和類型與源數組相同。 ———————————————————————————————————————————————————————————————————————————— cv::sortIdx() ; | 具備相同的目的cv::sort(),除了數組未修改並返回索引 |——用法: void cv :: sortIdx( cv :: InputArray src, cv :: OutputArray dst, int flag ); 相似於cv::sort() ,cv::sortIdx() 使用 僅適用於單通道二維陣列。 cv::sortIdx() 排序每行或列分開。 排序操做的結果是一個新數組,dst其大小與源數組相同,但包含已排序元素的整數索引。 ———————————————————————————————————————————————————————————————————————————— cv::split() ; | 將多通道陣列拆分爲多個單通道陣列 |——用法: void cv :: split( const cv :: Mat&mtx, cv :: Mat * mv ); void cv :: split( const cv :: Mat&mtx, vector <Mat>&mv // n個1通道cv :: Mat的STL樣式矢量 ); ———————————————————————————————————————————————————————————————————————————— cv::sqrt() ; | 計算數組的元素方形根 |——用法: void cv :: sqrt( cv :: InputArray src, cv :: OutputArray dst ); 做爲一個特例cv::pow(),cv::sqrt() 將會 計算數組的逐元素平方根。多個通道單獨處理。 ————————————————————————————————————————————————————————————————————��——————— cv::subtract() ; | 從另外一個陣列執行逐個元素的減法 |——用法: void cv :: subtract( cv :: InputArray src1,//第一個輸入數組 cv :: InputArray src2,//第二個輸入數組 cv :: OutputArray dst,//結果數組 cv :: InputArray mask = cv :: noArray(),//可選,僅在非零值的狀況下執行 int dtype = -1 //結果數組的輸出類型 ); ———————————————————————————————————————————————————————————————————————————— cv::sum() ; | 求和數組的全部數組 |——用法: cv :: Scalar cv :: sum( cv :: InputArray arr ); ———————————————————————————————————————————————————————————————————————————— cv::theRNG() ; | 返回一個隨機數生成器 ———————————————————————————————————————————————————————————————————————————— cv::trace() ; | 計算數組的跟蹤 |——用法: cv :: Scalar cv :: trace( cv :: InputArray mat ); 該矩陣的軌跡是全部對角元素的總和。 OpenCV中的跟蹤是在頂部實現的cv::diag(), 所以它不須要傳入的數組是方形的。支持多通道陣列,但跟蹤計算爲標量, 所以標量的每一個份量將是最多四個通道的每一個相應通道的總和。 ———————————————————————————————————————————————————————————————————————————— cv::transform() ; | 對數組的每一個元素應用矩陣變換 |——用法: void cv :: transform( cv :: InputArray src, cv :: OutputArray dst, cv :: InputArray mtx ); 該函數cv::transform() 可用於計算 任意線性圖像變換。 它將多通道輸入數組src 視爲矢量集合,您能夠將其視爲「通道空間」。 而後,這些矢量再乘以「小」矩陣,mtx 以影響此通道空間中的變換。 在mtx 由於有通道矩陣必須有儘量多的行src ,或數字加一。 在第二種狀況下,信道空間矢量insrc自動擴展1,並將值1.0分配給擴展元素 ———————————————————————————————————————————————————————————————————————————— cv::transpose() ; | 在對角線上轉置數組的全部元素 |——用法: void cv :: transpose( cv :: InputArray src,//輸入數組,2維,n-by-m cv :: OutputArray dst,//結果數組,2維,m-by-n ); cv::transpose() 將每一個元素複製src到dst經過反轉行和列索引指示 的位置。 該功能支持多通道陣列; 可是,若是您使用多個通道來表示複數, 請記住這cv::transpose()不會執行復雜的共軛。 ———————————————————————————————————————————————————————————————————————————— 【說明】: 在這些功能中,遵循一些通常規則。若是存在任何異常,則在功能描述中註明。因爲這些規則中的一個或多個適用於本章所述的幾乎全部功能,所以爲方便起見,此處列出了這些規則: [飽和]Saturation 計算輸出是飽和鑄造的 到了 輸出數組的類型。 [輸出]Output 若是輸出數組cv::Mat::create() 的類型和大小與所需的類型或大小不匹配,則將建立輸出數組。一般,所需的輸出類型和大小與輸入相同,可是對於某些功能,大小可能不一樣(例如cv::transpose )或類型可能不一樣(例如cv::split )。 [標量]Scalars 許多函數,例如cv::add() 容許添加兩個數組或一個數組和一個標量。在原型使選項清晰的狀況下,提供標量參數的結果與在每一個元素中爲第二個數組提供相同標量值的結果相同。 [掩模]Masks 每當函數存在掩碼參數時,將僅爲那些與輸出數組中該元素對應的掩碼值非零的元素計算輸出。 [dtype] 許多算術和相似函數不要求輸入數組的類型相同,即便它們相同,輸出數組也能夠是與輸入不一樣的類型。在這些狀況下,輸出數組必須明確指定其深度。這是經過dtype 參數完成的。當存在時,dtype 能夠設置爲任何基本類型(例如,CV_32F ),結果數組將是該類型。若是輸入數組具備相同的類型,則dtype 能夠將其設置爲其默認值-1 ,而且結果類型將與輸入數組的類型相同。 [就地操做]In-place operation 除非另有說明,不然任何具備相同大小和類型的數組輸入和數組輸出的操做均可以對二者使用相同的數組(即,容許在輸入的頂部寫入輸出)。 [多通道]Multichannel 對於那些不天然地使用多個通道的操做,若是給定多通道參數,則每一個通道單獨處理。 [例]從src2中的(0,0)開始將ROI與從src1中的(x,y)開始的ROI進行alpha混合的完整程序 // alphablend <imageA> <image B> <x> <y> <width> <height> <alpha> <beta> // #include <cv.h> #include <highgui.h> int main(int argc,char ** argv){ cv :: Mat src1 = cv :: imread(argv [1],1); cv :: Mat src2 = cv :: imread(argv [2],1); if(argc == 9 &&!src1.empty()&&!src2.empty()){ int x = atoi(argv [3]); int y = atoi(argv [4]); int w = atoi(argv [5]); int h = atoi(argv [6]); double alpha =(double)atof(argv [7]); double beta =(double)atof(argv [8]); cv :: Mat roi1(src1,cv :: Rect(x,y,w,h)); cv :: Mat roi2(src2,cv :: Rect(0,0,w,h)); cv :: addWeighted(roi1,alpha,roi2,beta,0.0,roi1); cv :: namedWindow(「Alpha Blend」,1); cv :: imshow(「Alpha Blend」,src2); cv :: waitKey(0); } return 0 ; }