合成模糊图像

举报
风吹稻花香 发表于 2021/06/04 23:02:17 2021/06/04
【摘要】 参考: https://www.cnblogs.com/arkenstone/p/8480759.html     1) 运动模糊图像 一般来说,运动模糊的图像都是朝同一方向运动的,那么就可以利用cv2.filter2D函数。 import numpy as np def motion_blur(image, degree=10, angle=...

参考:

https://www.cnblogs.com/arkenstone/p/8480759.html

 

 

1) 运动模糊图像

一般来说,运动模糊的图像都是朝同一方向运动的,那么就可以利用cv2.filter2D函数。


  
  1. import numpy as np
  2. def motion_blur(image, degree=10, angle=20):
  3. image = np.array(image)
  4. # 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高
  5. M = cv2.getRotationMatrix2D((degree/2, degree/2), angle, 1)
  6. motion_blur_kernel = np.diag(np.ones(degree))
  7. motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree))
  8. motion_blur_kernel = motion_blur_kernel / degree
  9. blurred = cv2.filter2D(image, -1, motion_blur_kernel)
  10. # convert to uint8
  11. cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
  12. blurred = np.array(blurred, dtype=np.uint8)
  13. return blurred

原图
动态模糊

2) 对焦模糊

opencv提供了GaussianBlur函数(具体参见这里).

image = cv2.GaussianBlur(image, ksize=(degree, degree), sigmaX=0, sigmaY=0)

 

对焦模糊

3) 噪点

其实就是在每个像素点添加随机扰动:


  
  1. def gaussian_noise(image, degree=None):
  2. row, col, ch = image.shape
  3. mean = 0
  4. if not degree:
  5. var = np.random.uniform(0.004, 0.01)
  6. else:
  7. var = degree
  8. sigma = var ** 0.5
  9. gauss = np.random.normal(mean, sigma, (row, col, ch))
  10. gauss = gauss.reshape(row, col, ch)
  11. noisy = image + gauss
  12. cv2.normalize(noisy, noisy, 0, 255, norm_type=cv2.NORM_MINMAX)
  13. noisy = np.array(noisy, dtype=np.uint8)
  14. return noisy

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/108052474

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。