OpenCV濾波

圖像通道在Android中默認(rèn)是ARGB,在OpenCV中是BGRA。

  1. RGB轉(zhuǎn)灰度值公式:R*0.299+G*0.587+B*0.114
  2. split函數(shù):分割圖像通道
  3. merge函數(shù):合并圖像通道
  4. saturate_cast<uchar>(321):在操作圖像像素的時(shí)候,可能會(huì)造成像素溢出,此函數(shù)可防止內(nèi)存溢出。
  5. cvtColor:圖像通道轉(zhuǎn)換。

3種線性濾波

  1. 方框?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 )
  1. 均值濾波:歸一化之后的方框?yàn)V波。
blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT )
  1. 高斯濾波:
/**
 * 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種非線性濾波

  1. 中值濾波:
/**
 * ksize:大于1的奇數(shù)。
 */
medianBlur( InputArray src, OutputArray dst, int ksize )
  1. 雙邊濾波:
bilateralFilter( InputArray src, OutputArray dst, int d,
                                   double sigmaColor, double sigmaSpace,
                                   int borderType = BORDER_DEFAULT )

3. 形態(tài)學(xué)濾波

最基礎(chǔ)的兩種形態(tài)學(xué)操作:
  1. 膨脹:求局部最大值(亮的地方越來(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() )
  1. 腐蝕:求局部最小值(暗的地方越來(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é)操作
  1. 開(kāi)運(yùn)算:(先腐蝕后膨脹)消除小物體,纖細(xì)點(diǎn)上分離物體。平滑較大物體邊緣,操作時(shí)不明顯改變物體面積。
  2. 閉運(yùn)算:(先膨脹后腐蝕)消除小型黑洞。
  1. 形態(tài)學(xué)梯度:(膨脹圖-腐蝕圖)保留物體的邊緣輪廓。
  2. 頂帽:(源圖-開(kāi)運(yùn)算)做背景提取,(有大背景獲取微小物體有規(guī)律的時(shí)候。)
  3. 黑帽:(閉運(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() )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容