例子源于OpenCV官网手册(https://docs.opencv.org/4.x/d4/dbd/tutorial_filter_2d.html)
使用OpenCV函数filter2D()创建自己的线性过滤器。
**
运行结果:
**
源代码:
"""
@file filter2D.py
@brief Sample code that shows how to implement your own linear filters by using filter2D function
"""
import sys
import cv2 as cv
import numpy as np
def main(argv):
window_name = 'filter2D Demo'
#加载图像
imageName = argv[0] if len(argv) > 0 else 'lena.jpg'
# Loads an image
src = cv.imread(cv.samples.findFile(imageName), cv.IMREAD_COLOR)
# Check if image is loaded fine
if src is None:
print ('Error opening image!')
print ('Usage: filter2D.py [image_name -- default lena.jpg] \n')
return -1
ddepth = -1#初始化参数
ind = 0
while True:
#循环:执行一个无限循环,更新内核大小,并对输入图像应用线性滤波器。
kernel_size = 3 + 2 * (ind % 5)#将kernel_size更新为[3,11]范围内的奇数值。
kernel = np.ones((kernel_size, kernel_size), dtype=np.float32)#构建了内核,将它的值设置为一个充满1的矩阵
kernel /= (kernel_size * kernel_size)#通过将其除以元素的数量来对其进行规范化
dst = cv.filter2D(src, ddepth, kernel)#设置内核之后,我们可以使用filter2D()函数来生成过滤器
#src:源图像
#ddepth:夏令时的深度。负值(如−1)表示深度与源相同。
#kernel:要通过图像扫描的内核
cv.imshow(window_name, dst)
c = cv.waitKey(500)
if c == 27:
break
ind += 1
return 0
if __name__ == "__main__":
main(sys.argv[1:])