filter2D和sepFilter2D
- 1. 函式定義
- 1.1 filter2D
- 1.2 sepFilter2D
- 1.3 分解卷積核的好處
- 2. 生成卷積核
1. 函式定義
1.1 filter2D
OpenCV官方檔案filter2D
- 影像與內核的卷積,
- 函式在影像上應用任意線型濾波器,
- 支持就地呼叫
void filter2D(
InputArray src,
OutputArray dst,
int ddepth,
InputArray kernel,
Point anchor = Point(-1, -1),
double delta = 0,
int borderType = BORDER_DEFAULT
);
- kernel:卷積核,作用于單通道浮點矩陣;如果你想處理多通道影像,不同通道使用不同的濾波器,那么就要先拆通道,然后分別處理,
- **anchor **:錨點位置,(-1,-1)表示錨點在核的中心,
- delta:偏移量,
1.2 sepFilter2D
OpenCV官方檔案sepFilter2D
- 使用可分離線性濾波器處理影像
void sepFilter2D(
InputArray src,
OutputArray dst,
int ddepth,
InputArray kernelX,
InputArray kernelY,
Point anchor = Point(-1, -1),
double delta = 0,
int borderType = BORDER_DEFAULT
);
- kernelX,kernelY:函式使用的是可分離線性濾波器,也就是說行和列使用的核是不同的,它們都是一維矩陣,
- delta:偏移量,
- 其余引數和filter2D是一樣的,
1.3 分解卷積核的好處
- 一個可分核可以理解成兩個一維核,在卷積時先呼叫x內核,然后呼叫y內核,兩個矩陣進行卷積所產生的消耗可以用兩個矩陣的面積的積來估算,如此一來,用n×n的核對面積為A的影像進行卷積所需的時間是An2,但如果分解成 n×1 和 1×n 的兩個核,那么代價就是 An +An = 2An ,因此分解卷積核可以提高卷積計算的效率,
- 只要n不小于3,這種計算方式就能提高效率,并且隨著n的增大,這種效益愈發明顯,
2. 生成卷積核
生成導數核getDerivKernel 生成高斯核getGaussianKernel
- 導數濾波器 Sobel 和 Scharr 所使用的核稱為導數核,可以由 getDerivKernels() 生成,
- 高斯模糊算子GaussianBlur所使用的高斯核可以由 getGaussianKernel() 生成,
- 方框型濾波器(blur、boxFilter)還有中值模糊(medianBlur),它們使用的卷積核都是二維矩陣,所以可以使用 fiter2D 替代,而它們所使用的卷積核需要你自己構造,
- 形態學morphologyEx所使用的核是由 getStructuringElement() 生成的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/377231.html
標籤:其他
下一篇:關于如何在視頻中合成聲音
