滤波器在图像处理中的应用非常广泛,OpenCV也有个直接使用滤波器掩码(核)的函数filter2D,将图像与核进行卷积运算得到目标图像。卷积是在每一个图像块与某个算子(核)之间进行的运算,而核就是一个固定大小的数值数组。
实际上,在OpenCV中很多算法都是用卷积实现的,包括一些边缘检测的算法。本文无意列举这些算法的原理,仅仅是考察一下OpenCV的实现,再尝试用Python调用这些算法,看看其效果。
直接利用 filter2D得到图片的滤波
# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Time : 2018/11/19 15:42
# @Author : xhh
# @Desc : 图片滤波器
# @File : opencv_filterImg.py
# @Software: PyCharm
import cv2
import numpy as np
# filter2D
img = cv2.imread('../tupian/green.png')
cv2.imshow('src', img)
# 直接给出图片的滤波矩阵
kernel = np.array([ [-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1] ])
filter_dst = cv2.filter2D(img, -1, kernel)
cv2.imshow('dst', filter_dst)
cv2.waitKey(0)
结果: