首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

OpenCV 學習筆記(六):Mask Operation 與 filter2D 函數詳解

     編輯:關於C

什麼是 Mask Operation?

在影像處理中,所謂的 Mask Operation(遮罩運算) 實質上就是濾波。它透過一個小型矩陣(稱為 Kernel 或 Mask)在影像上滑動,對每個像素及其鄰域進行加權運算,以實現銳化、模糊、邊緣檢測等效果。

第一步:建立 Mask(卷積核)

以一個 3×3 的銳化核為例:

Mat kern = (Mat_(3,3) << 0, -1, 0, 
                                  -1, 5, -1, 
                                   0, -1, 0);

Mat_ 是 OpenCV 的模板類別,用於快速建立矩陣。上述程式碼建立了一個 3×3 的有號字元矩陣(數值範圍 -128~127),中心權重為 5,四周為 -1,這是一個典型的拉普拉斯銳化核。

第二步:呼叫 filter2D 進行濾波

函數原型如下:

void filter2D(InputArray src,      // 輸入影像
              OutputArray dst,     // 輸出影像
              int ddepth,          // 輸出影像深度,通常用 src.depth()
              InputArray kernel,   // 卷積核(第一步建立的 Mask)
              Point anchor=Point(-1,-1), // 錨點,預設為核心中心
              double delta=0,      // 運算後額外加上的值
              int borderType=BORDER_DEFAULT); // 邊界處理模式

實際呼叫範例:

filter2D(I, K, I.depth(), kern);

官方範例程式碼解析

OpenCV 2.0 附帶的範例展示了手寫銳化函數與 filter2D 的效能比較:

  • Sharpen():手寫雙重迴圈實現銳化,逐像素存取,速度較慢。
  • filter2D():呼叫優化過的底層實現,速度顯著更快。

範例中使用 getTickCount() 計時,直觀展示了內建函數的效能優勢。實際開發中,優先使用內建函數,除非有極特殊的自定義需求。

重點總結

  1. Mask 即卷積核,決定濾波效果(銳化、模糊、邊緣檢測等)。
  2. Mat_ 方便快速建構小型矩陣。
  3. filter2D 是 OpenCV 提供的通用 2D 濾波函數,效能優於手寫迴圈。
  4. 錨點預設為核心中心(-1,-1),邊界處理預設為 BORDER_DEFAULT(反射法)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved