openCV 影象相加,位運算,協方差,絕對值,比較
(1)基本運算
兩影象相加:
add(InputArray src1,InputArray src2, OutputArray dst, InputArray mask=noArray(),int dtype=-1):如可用add(A,B,C)來計算C=A+B;如果指定了影象掩模mask(注:mask必須為單通道),則運算只在mask對應畫素部位null的畫素上進行,add(A,B,C,mask)意為if(mask[i]0)c[i]=a[i]+b[i];
addWeighted(InputArray src1,double alpha, InputArray src2, double beta, double gamma,OutputArraydst, int dtype=-1):計算加權和,如addWeighted(A,k1,B,k2,k3,C)表示C=k1*A+k2*B+k3;
scaleAdd(A,k1,B,C)表示C=k1*A+B
減:subtract(A,B,C)表示C=A-B
乘:mutiply(A,B,C,k)表示C=k*A*B
divide(InputArray src1,InputArray src2, OutputArray dst, double scale=1,int dtype=-1):除法,divide(A,B,C,k)表示C=(A*k/B);也可以直接用一個scale來除以array,divide(k,B,C)表示C=k/B
當然還有其他計算符,如log()、exp()
位運算:
bitwise_and(InputArray src1,InputArray src2, OutputArray dst, InputArray mask=noArray()):按位與,bitwise_and(A,B,C,mask)表示if(mask[i])a[i]^b[i]=c[i]
bitwise_not(A,B,mask):按位非,b[i] =~a[i]
bitwise_or(A,B,C):按位或,C=AB
bitewise_xor(A,B,C):按位異或,C=AB
此處需要注意的是,所有這些運算都會呼叫cv::saturate_cast函式來進行截斷操作,以保證輸出畫素值都在合理的範圍之內。另外,opencv對c++的很多操作符都進行了過載,所以可以直接使用運算子+,=,*,/,&,|,~,^,<,>等來對影象矩陣進行操作,矩陣求逆m.inv(),矩陣轉置m.t(),行列式m.determinant(),向量模v.norm(),向量叉乘v1.cross(v2),向量點積v1.dot(v2)
(2)矩陣操作
calcCovarMatrix():計算協方差矩陣
invert(InputArray src,OutputArray dst, int flags=DECOMP_LU):求逆矩陣
sqrt(InputArray src,OutputArray dst):計算平方根
求絕對值:
abs(const Mat& m):求絕對值,輸入引數可是矩陣也可是表示式,如:C=abs(A),C=abs(A-B)
absdiff(InputArray src1,InputArray src2, OutputArray dst):absdiff(A,B,C)等價於C=abs(A-B)
cartToPolar(InputArray x, InputArray y,OutputArray magnitude, OutputArray angle, boolangleInDegrees=false):計算二維向量的幅值和向角
dct(InputArray src,OutputArray dst, int flags=0):離散餘弦變換
dft(InputArray src,OutputArray dst, int flags=0, int nonzeroRows=0):離散傅立葉變換
flip(InputArray src,OutputArray dst, int flipCode):對影象進行翻轉,flipCode>0,進行垂直翻轉;flipCode=0,進行水平翻轉;flipCode<0,同時進行水平、垂直翻轉;
(3)比較操作
CheckRange():用來判斷輸入array中的每個元素是否都處於某一範圍內
compare(InputArray A, InputArray B,OutputArray C, int cmpop):根據引數cmpop的值來決定A和B比較的方式,其值有CMP_EQ,CMP_GT, CMP_GE, CMP_LT, CMP_LE, CMP_NE,結果輸出為C;
min():如C=min(A,B)表示c[i]=min(a[i],b[i])
max():與min()類似
注意,此處所有函式在呼叫時都要加上名稱空間cv::
opencv裡面,基本上矩陣、向量能想到的操作都有相對應的函式,非常之多,在此不能一一列出,具體的在opencv的online documentation裡面都有。建議大家在實際程式設計時,遇到跟矩陣相關的運算、操作時都先去查閱一下opencv的online documentation,要是裡面有現成的函式就可以直接呼叫了,沒有的再去自己想辦法寫。有關矩陣操作符的庫函式主要集中在opencv_core模組中。