OpenCV——卷积滤波器

卷积滤波器是基于核的滤波器,其实核是一组权重,它决定如何通过邻近像素点来计算新的像素点。核也称为卷积矩阵,它对一个区域的像素做调和或卷积运算。

OpenCV提供了一个非常通用的filter2D()函数,它运用由用户指定的任意核或卷积矩阵。

cv2.filter2D(src, -1, kernel, dst)

第二个参数指定了目标图像每个通道的位深度(比如,位深度cv2.CV_8U表示每个通道为8位),如果为负值,则表示目标图像与源图像有同样的位深度。

下面分别构建一个一般的卷积滤波器、锐化滤波器、边缘检测滤波器、模糊滤波器、模糊锐化滤波器(浮雕效果)。

需要注意的是,如果不想改变图像的亮度,就应该使卷积核的权重之和为1;如果为0,就会得到一个边缘检测核,把边缘转为白色,把非边缘区域转化为黑色。

  • 源代码
class VConvolutionFilter(object):
    """A filter that applies a convolution to V (or all of BGR)."""

    def __init__(self, kernel):
        self._kernel = kernel

    def apply(self, src, dst):
        """Apply the filter with a BGR or gray source/destination."""
        cv2.filter2D(src, -1, self._kernel, dst)


class SharpenFilter(VConvolutionFilter):
    """A Sharpen filter with a 1-pixel radius."""

    def __init__(self):
        kernel = np.array([[-1, -1, -1],
                           [-1, 9, -1],
                           [-1, -1, -1]])
        VConvolutionFilter.__init__(self, kernel)


class FindEdgesFilter(VConvolutionFilter):
    """An edge-finding filter with a 1-pixel radius."""

    def __init__(self):
        kernel = np.array([[-1, -1, -1],
                           [-1, 8, -1],
                           [-1, -1, -1]])
        VConvolutionFilter.__init__(self, kernel)


class BlurFilter(VConvolutionFilter):
    """A blur filter with a 2-pixel radius."""

    def __init__(self):
        kernel = np.array([[0.04, 0.04, 0.04, 0.04, 0.04],
                           [0.04, 0.04, 0.04, 0.04, 0.04],
                           [0.04, 0.04, 0.04, 0.04, 0.04],
                           [0.04, 0.04, 0.04, 0.04, 0.04],
                           [0.04, 0.04, 0.04, 0.04, 0.04]])
        VConvolutionFilter.__init__(self, kernel)


class EmbossFilter(VConvolutionFilter):
    """An emboss filter with a 1-pixel radius."""

    def __init__(self):
        kernel = np.array([[-2, -1, 0],
                           [-1, 1, 1],
                           [0, 1, 2]])
        VConvolutionFilter.__init__(self, kernel)

  • lena.jpg

OpenCV——卷积滤波器_第1张图片

  • 锐化处理

OpenCV——卷积滤波器_第2张图片

  • 边缘检测

OpenCV——卷积滤波器_第3张图片

  • 模糊处理

OpenCV——卷积滤波器_第4张图片

  • 浮雕效果

OpenCV——卷积滤波器_第5张图片


想了解更多关于数字图像处理:数字图像处理专栏

你可能感兴趣的:(Python,数字图像处理,OpenCV,数字图像处理)