用点扩散函数创建运动模糊图像
时间: 2023-06-17 10:07:44 浏览: 56
点扩散函数可以用来模拟运动模糊效果。运动模糊是由于相机或被拍摄物体的移动而导致的图像模糊。下面是用Python实现创建运动模糊图像的示例代码:
```python
import numpy as np
import cv2
# 生成点扩散函数
def motion_blur_kernel(sz, angle):
kernel = np.zeros((sz, sz), dtype=np.float32)
theta = np.radians(angle)
center = (sz-1)/2
slope = np.tan(theta)
if theta == np.pi/2:
kernel[:, int(center)] = np.ones(sz)
elif theta == 0:
kernel[int(center), :] = np.ones(sz)
else:
for i in range(sz):
x = int(i-center)
for j in range(sz):
y = int(j-center)
if abs(y) <= abs(x*slope):
kernel[i, j] = 1.0
kernel /= np.sum(kernel)
return kernel
# 读取图片
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
# 创建点扩散函数
kernel = motion_blur_kernel(15, 45)
# 进行卷积
blurred = cv2.filter2D(img, -1, kernel)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Motion Blur', blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码中,`motion_blur_kernel`函数用于生成点扩散函数,`sz`指定点扩散函数的大小,`angle`指定运动方向。在`main`函数中,我们首先读取一张灰度图像,然后创建点扩散函数,最后对图像进行卷积操作,得到运动模糊图像。