圖像通道在Android中默認(rèn)是ARGB,在OpenCV中是BGRA。
- RGB轉(zhuǎn)灰度值公式:R*0.299+G*0.587+B*0.114
- split函數(shù):分割圖像通道
- merge函數(shù):合并圖像通道
- saturate_cast<uchar>(321):在操作圖像像素的時(shí)候,可能會(huì)造成像素溢出,此函數(shù)可防止內(nèi)存溢出。
- cvtColor:圖像通道轉(zhuǎn)換。
3種線性濾波
- 方框?yàn)V波:
/**
* src:輸入圖像
* dst:輸出圖像
* ddepth:圖像深度(存儲(chǔ)每個(gè)像素的位數(shù),一般情況使用-1)-1表示使用源圖的深度。
* ksize:核心矩陣
* anchor:錨點(diǎn)
* normalize:歸一化
* borderType:邊界模式
*/
boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT )
- 均值濾波:歸一化之后的方框?yàn)V波。
blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT )
- 高斯濾波:
/**
* ksize:正數(shù)奇數(shù)
* sigmaX:高斯函數(shù)在x方向的偏差
* sigmaY:高斯函數(shù)在y方向的偏差,默認(rèn)值為0。
*/
GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
2種非線性濾波
- 中值濾波:
/**
* ksize:大于1的奇數(shù)。
*/
medianBlur( InputArray src, OutputArray dst, int ksize )
- 雙邊濾波:
bilateralFilter( InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace,
int borderType = BORDER_DEFAULT )
3. 形態(tài)學(xué)濾波
最基礎(chǔ)的兩種形態(tài)學(xué)操作:
- 膨脹:求局部最大值(亮的地方越來(lái)越大)。
/**
* shape:圖形 MorphShapes::MORPH_RECT 矩形
* MorphShapes::MORPH_CROSS 交叉形
* MorphShapes::MORPH_ELLIPSE 橢圓形
* ksize:大小
* anchor:錨點(diǎn)
*/
getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1))
/**
* src:源圖像
* dst:生成圖像
* kernel:核心區(qū)域,通過(guò)getStructuringElement獲取。
* anchor:錨點(diǎn)
* iterations:迭代使用dilate函數(shù)的次數(shù)。
* borderType:默認(rèn)
* borderValue:默認(rèn)
*/
dilate( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
- 腐蝕:求局部最小值(暗的地方越來(lái)越大)。
/**
* 參數(shù)同上。
*/
erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )
形態(tài)學(xué)操作
- 開(kāi)運(yùn)算:(先腐蝕后膨脹)消除小物體,纖細(xì)點(diǎn)上分離物體。平滑較大物體邊緣,操作時(shí)不明顯改變物體面積。
- 閉運(yùn)算:(先膨脹后腐蝕)消除小型黑洞。
- 形態(tài)學(xué)梯度:(膨脹圖-腐蝕圖)保留物體的邊緣輪廓。
- 頂帽:(源圖-開(kāi)運(yùn)算)做背景提取,(有大背景獲取微小物體有規(guī)律的時(shí)候。)
- 黑帽:(閉運(yùn)算-源圖)可以得到輪廓圖。
/**
* 形態(tài)學(xué)函數(shù)
* op:形態(tài)類型操作符。MorphTypes::MORPH_OPEN(開(kāi)運(yùn)算操作符)
* MORPH_CLOSE(閉運(yùn)算操作符)
* MORPH_GRADIENT(形態(tài)學(xué)梯度操作符)
* MORPH_TOPHAT(頂帽操作符)
* MORPH_BLACKHAT(黑帽操作符)
* MORPH_ERODE(腐蝕操作符)
* MORPH_DILATE(膨脹操作符)
* kernel:同1中kernel。
* anchor:錨點(diǎn)
* iterations:迭代運(yùn)算次數(shù)
* borderType:
* borderValue:
*/
morphologyEx( InputArray src, OutputArray dst,
int op, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )