Python调用图像处理图像滤波算法代码
时间: 2023-10-07 15:08:46 浏览: 41
可以使用Python中的OpenCV库来调用图像处理和图像滤波算法。以下是一个简单的示例代码:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 应用中值滤波算法
filtered_img = cv2.medianBlur(img, 5)
# 显示原始图像和过滤后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Filtered Image', filtered_img)
# 保存过滤后的图像
cv2.imwrite('filtered_image.jpg', filtered_img)
# 等待用户按下任意按键
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()
```
在此示例中,我们使用cv2.medianBlur()函数应用中值滤波算法对输入的图像进行过滤,并使用cv2.imshow()函数显示原始图像和过滤后的图像,最后使用cv2.imwrite()函数将过滤后的图像保存在本地磁盘上。
相关问题
经典图像自适应滤波python代码怎么写?
经典图像自适应滤波是指根据图像局部区域的统计信息,对该区域内的像素进行滤波。常用的经典图像自适应滤波算法有均值滤波、中值滤波、高斯滤波等。下面是一个基于Python实现的经典图像自适应中值滤波的代码:
```python
import cv2
import numpy as np
def adaptive_median_filter(img, max_window_size):
# 获取图像的行数和列数
rows, cols = img.shape
# 初始化输出图像
out = np.zeros((rows, cols), dtype=np.uint8)
# 遍历每个像素
for i in range(rows):
for j in range(cols):
# 初始化窗口大小为3
window_size = 3
while window_size <= max_window_size:
# 计算滑动窗口的上下左右边界
top = i - (window_size // 2)
bottom = i + (window_size // 2)
left = j - (window_size // 2)
right = j + (window_size // 2)
# 处理边界情况
if top < 0:
top = 0
if bottom >= rows:
bottom = rows - 1
if left < 0:
left = 0
if right >= cols:
right = cols - 1
# 获取当前窗口内的像素值
window = img[top:bottom+1, left:right+1].flatten()
# 计算窗口内像素的中值和均值
median = np.median(window)
mean = np.mean(window)
# 如果当前像素值位于中值和均值之间,则输出中值
if median < img[i, j] < mean:
out[i, j] = median
break
# 如果当前窗口大小超过最大窗口大小,则输出中值
if window_size == max_window_size:
out[i, j] = median
break
# 增大窗口大小
window_size += 2
return out
# 载入图像
img = cv2.imread('test.jpg', 0)
# 调用自适应中值滤波函数
out = adaptive_median_filter(img, 7)
# 显示原图和处理后的图像
cv2.imshow('Input', img)
cv2.imshow('Output', out)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们定义了一个`adaptive_median_filter`函数来实现自适应中值滤波。该函数接受两个参数,分别是输入图像和最大窗口大小。在函数中,我们首先初始化输出图像,然后遍历每个像素。对于每个像素,我们从窗口大小为3开始,逐渐增大窗口大小,直到达到最大窗口大小为止。在每个窗口内,我们计算窗口内像素的中值和均值,并根据中值和均值的大小关系来判断是否需要输出中值。如果当前窗口大小已经达到最大窗口大小,或者当前像素值位于中值和均值之间,则输出中值。最后,我们将处理后的图像返回给调用者。
用python实现中值滤波算法
中值滤波是一种非线性滤波算法,它的基本思想是用滑动窗口将图像中的每个像素点替换成该窗口内像素值的中值。以下是用Python实现中值滤波的代码:
``` python
import cv2
import numpy as np
def median_filter(img, size):
# 获取图像的行数和列数
row, col = img.shape
# 计算滑动窗口的边长
border = (size - 1) // 2
# 创建一个全零的数组,用于存储处理后的图像
out_img = np.zeros((row, col), np.uint8)
# 遍历每个像素点
for i in range(border, row-border):
for j in range(border, col-border):
# 获取滑动窗口中的像素值
window = img[i-border:i+border+1, j-border:j+border+1]
# 将滑动窗口中的像素值排序
sort_window = np.sort(window.flatten())
# 取中间值作为该像素点的值
out_img[i, j] = sort_window[(size*size)//2]
return out_img
# 读取图像
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
# 调用中值滤波函数
out_img = median_filter(img, 3)
# 显示原图和处理后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filter Image', out_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,`median_filter`函数实现了中值滤波算法。它接受两个参数:原始图像和滑动窗口的大小。函数内部首先计算了滑动窗口的边长,然后遍历每个像素点,获取对应的滑动窗口,将窗口内的像素值排序并取中间值作为该像素点的值,最后将处理后的像素值存储在输出图像中。最后,我们读取一张灰度图像,调用`median_filter`函数对其进行中值滤波处理,并显示原图和处理后的图像。