Python-OpenCV中的filter2D()函数

Posted lfri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-OpenCV中的filter2D()函数相关的知识,希望对你有一定的参考价值。

使用自定义内核对图像进行卷积。该功能将任意线性滤波器应用于图像。支持就地操作。当光圈部分位于图像外部时,该功能会根据指定的边框模式插入异常像素值。

 

语法

函数原型:

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()函数的主要内容,如果未能解决你的问题,请参考以下文章

Python-OpenCV中的图像模糊

Python-OpenCV中的cv2.threshold

OpenCV:filter2D函数的计算效率

Python-OpenCV 中的绘图函数

OpenCV filter2d 给出不正确的结果

opencv filter2D()函数(卷积)计算原理