1. 程式人生 > >Python-OpenCV中的filter2D()函數

Python-OpenCV中的filter2D()函數

depth org ack open returns ... 支持 tran project

使用自定義內核對圖像進行卷積。該功能將任意線性濾波器應用於圖像。支持就地操作。當光圈部分位於圖像外部時,該功能會根據指定的邊框模式插入異常像素值。

語法

函數原型:

dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

參數:

參數 描述
src 原圖像
dst 目標圖像,與原圖像尺寸和通過數相同
ddepth 目標圖像的所需深度
kernel 卷積核(或相當於相關核),單通道浮點矩陣;如果要將不同的內核應用於不同的通道,請使用拆分將圖像拆分為單獨的顏色平面,然後單獨處理它們。
anchor 內核的錨點,指示內核中過濾點的相對位置;錨應位於內核中;默認值(-1,-1)表示錨位於內核中心。
detal 在將它們存儲在dst中之前,將可選值添加到已過濾的像素中。類似於偏置。
borderType 像素外推法,參見BorderTypes

改函數實際計算的是相關性,而不是卷積

$$\texttt{dst} (x,y) = \sum _{ \stackrel{0\leq x‘ < \texttt{kernel.cols},}{0\leq y‘ < \texttt{kernel.rows}} } \texttt{kernel} (x‘,y‘)* \texttt{src} (x+x‘- \texttt{anchor.x} ,y+y‘- \texttt{anchor.y} )$$

在內核足夠大(~11x11或者更大)的時候,該函數使用DFT算法,對於小內核則直接計算。

也可見,anchor相當於坐標軸平移。

其中ddepth表示目標圖像的所需深度,它包含有關圖像中存儲的數據類型的信息,可以是unsigned char(CV_8U),signed char(CV_8S),unsigned short(CV_16U)等等...

Input depth (src.depth())Output depth (ddepth)
CV_8U -1/CV_16S/CV_32F/CV_64F
CV_16U/CV_16S -1/CV_32F/CV_64F
CV_32F -1/CV_32F/CV_64F
CV_64F -1/CV_64F

Note:當ddepth=-1時,表示輸出圖像與原圖像有相同的深度。

參考鏈接:

1、Depth combination https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#filter_depths

2、

Python-OpenCV中的filter2D()函數