1. 程式人生 > >openCV 影象相加,位運算,協方差,絕對值,比較

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模組中。