python opencv2怎么实现高通滤波
时间: 2023-11-12 16:09:14 浏览: 94
高通滤波器是一种图像增强滤波器,它可以增强图像的高频细节,减少图像的低频成分。在OpenCV中,可以使用cv2.filter2D()函数实现高通滤波。
下面是一个实现高通滤波的示例代码:
``` python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('input.jpg')
# 构建高通滤波器核
kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
# 执行高通滤波
result = cv2.filter2D(img, -1, kernel)
# 显示原图和处理后的图像
cv2.imshow('Original', img)
cv2.imshow('Result', result)
cv2.waitKey()
```
在上面的代码中,我们构建了一个3x3的高通滤波器核,并使用`cv2.filter2D()`函数执行滤波操作。`-1`参数表示输出图像与输入图像具有相同的深度。最后使用`cv2.imshow()`函数显示原图和处理后的图像。
你可以根据需要调整滤波器的大小和参数,以实现不同的效果。
相关问题
python opencv 把理想高通滤波后的图像转为灰度图
可以使用以下代码将理想高通滤波后的图像转为灰度图:
```python
import cv2
import numpy as np
# 读取图像并转为灰度图
img = cv2.imread('image.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 创建高通滤波器核
dft = cv2.dft(np.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
rows, cols = gray.shape
crow, ccol = int(rows/2), int(cols/2)
mask = np.zeros((rows, cols, 2), np.float32)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
mask = 1 - mask
# 理想高通滤波
fshift = dft_shift * mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])
# 显示灰度图
cv2.imshow('Gray Image', img_back)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,使用 `cv2.cvtColor()` 将图像转为灰度图,然后创建高通滤波器核并进行理想高通滤波,最后使用 `cv2.imshow()` 显示灰度图。
python opencv 高斯高通滤波
高斯高通滤波是一种图像增强技术,可以通过增强图像中高频信息的方式来增强图像的细节。
使用OpenCV实现高斯高通滤波可以分为以下几步:
1.读取图像并将其转换为灰度图像。
import cv2
img = cv2.imread('input.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
2.计算高斯核。
ksize = 3 # 此处选择核的大小为3,可以根据实际情况进行调整
sigma = 1.5 # 此处选择sigma=1.5,可以根据实际情况进行调整
kernel = cv2.getGaussianKernel(ksize, sigma)
kernel = kernel * kernel.T # 使高斯核变成二维
3.进行高斯卷积。
gaussian = cv2.filter2D(gray, -1, kernel)
4.进行高通滤波。
alpha = 1.5 # 此处选择alpha=1.5,可以根据实际情况进行调整
beta = 0.5 # 此处选择beta=0.5,可以根据实际情况进行调整
highpass = gray - beta * gaussian
highpass = cv2.convertScaleAbs(alpha * highpass)
5.将处理后的图像进行保存。
cv2.imwrite('output.png', highpass)
完整代码如下:
import cv2
img = cv2.imread('input.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ksize = 3
sigma = 1.5
kernel = cv2.getGaussianKernel(ksize, sigma)
kernel = kernel * kernel.T
gaussian = cv2.filter2D(gray, -1, kernel)
alpha = 1.5
beta = 0.5
highpass = gray - beta * gaussian
highpass = cv2.convertScaleAbs(alpha * highpass)
cv2.imwrite('output.png', highpass)
阅读全文