opencvC 學習15線性濾波

2021-08-20 20:06:06 字數 2117 閱讀 7766

卷積是影象處理中乙個操作,是kernel在影象的每個畫素上的操作。

kernel本質上乙個固定大小的矩陣陣列,其中心點稱為錨點(anchor point)

把kernel放到畫素陣列之上,求錨點周圍覆蓋的畫素乘積之和(包括錨點),用來替換錨點覆蓋下畫素點值稱為卷積處理。數學表達如下:

robert運算元

sobel運算元

拉普拉斯運算元

#include using namespace cv;

using namespace std;

mat src, gray_src, dst;

int main()

namedwindow("src", cv_window_autosize);

imshow("src", src);

// robert x 方向

mat kernel_x =( mat_(2, 2) << 1, 0, 0, -1);

filter2d(src, dst, src.depth(), kernel_x, point(-1, -1), 0.0, 4);

imshow("robertx", dst);

// robert y 方向

mat kernel_y = (mat_(2, 2) << 0, 1, -1,0);

filter2d(src, dst, src.depth(), kernel_y, point(-1, -1), 0.0, 4);

imshow("roberty", dst);

// sobel x 方向

mat kernel_sx = (mat_(3, 3) << -1, 0, 1, -2,0,2,-1,0,1);

filter2d(src, dst, -1, kernel_sx, point(-1, -1), 0.0);

imshow("sobelx", dst);

// sobel y 方向

//mat yimg;

mat kernel_sy = (mat_(3, 3) << -1, -2, -1, 0,0,0, 1,2,1);

filter2d(src, dst, -1, kernel_sy, point(-1, -1), 0.0);

imshow("sobely", dst);

// 拉普拉斯運算元

mat kernel_ly = (mat_(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);

filter2d(src, dst, -1, kernel_ly, point(-1, -1), 0.0);

imshow("lp", dst);

//自定義卷積模糊

int c = 0;

int index = 0;

int ksize = 0;

while (true)

ksize = 5 + (index % 8) * 2;

mat kernel = mat::ones(size(ksize, ksize), cv_32f) / (float)(ksize * ksize);

filter2d(src, dst, -1, kernel, point(-1, -1));

index++;

imshow("out", dst);

} waitkey(0);

return 0;

}

線性濾波 非線性濾波區別

數字影象處理線性濾波 輸出影象fo x,y t fi x,y t是線性運算元,即 輸出影象上每個畫素點的值都是由輸入影象各畫素點值加權求和的結果。非線性濾波的運算元中包含了取絕對值 置零等非線性運算。線性濾波器的原始資料與濾波結果是一種算術運算,即用加減乘除等運算實現,如均值濾波器 模板內畫素灰度值...

opencv C 學習筆記

1.opencv實際上是在c 的基礎上增加的庫,本質上還是c 2.mat 乙個類,用來建立物件來儲存影象的資訊 3.namedwindow 新建乙個顯示視窗 5.cout 輸出到工作台 6.image.rows cols 影象的行數 列數 7.waitkey 0 等待使用者按鍵事件 8.median...

什麼是線性濾波 非線性濾波

數字影象處理線性濾波 輸出影象fo x,y t fi x,y t是線性運算元,即 輸出影象上每個畫素點的值都是由輸入影象各畫素點值加權求和的結果。非線性濾波的運算元中包含了取絕對值 置零等非線性運算。線性濾波器的原始資料與濾波結果是一種算術運算,即用加減乘除等運算實現,如均值濾波器 模板內畫素灰度值...