本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0
实现目的
学会如何构建一个实数Gabor的滤波器,用于检测已知方向的边缘。
实现代码
1,加载需要的库和显示图像
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math #加载math库
# 加载图片并转换为0-1之间数值float32格式
img = cv2.imread('dog.png',0).astype(np.float32) / 255
plt.imshow(img, cmap='gray')
2,创建一个实数Gabor滤波器内核
kernel = cv2.getGaborKernel((21, 21), 5, 1, 10, 1, 0, cv2.CV_32F)
kernel /= math.sqrt((kernel * kernel).sum())
3,应用滤波器处理图像
filtered = cv2.filter2D(img, -1, kernel)
4,显示结果
plt.figure(figsize=(10,10))
plt.subplot(131)
plt.axis('off')
plt.title('image')
plt.imshow(img, cmap='gray')
plt.subplot(132)
plt.title('kernel')
plt.imshow(kernel, cmap='gray')
plt.subplot(133)
plt.axis('off')
plt.title('filtered')
plt.imshow(filtered, cmap='gray')
plt.tight_layout()
plt.show()
程序说明
Gabor滤波器是一种线性滤波器,其核心是二维高斯余弦调制的高斯滤波器。使用cv.getGaborKernel
函数可以定义内核,它接受内核大小、高斯标准差、波的方向、波长、空间比和相位等参数。Gabor滤波器的一个有用领域是检测已知方向的边缘。
cv2.getGaborKernel
的具体使用方法
https://docs.opencv.org/4.1.1/d4/d86/group__imgproc__filter.html#gae84c92d248183bd92fa713ce51cc3599