在opencv中,可以利用随机噪声、滤波器等方法为图像叠加仿真的雨滴的运动轨迹,使通常情况下拍摄的图像有了烟雨蒙蒙的效果。
 

1.生成随机噪声

首先,我们需要生成不同密度的随机噪声来模拟不同大小的余量,于是利用了下面的函数来生成。主要的使用了均匀随机数和阈值来控制噪声的水平。由于生成噪声是浮点数,所以在value上乘了尺度缩小因子。

import cv2
import numpy as npdef get_noise(img, value=10):'''#生成噪声图像>>> 输入: img图像value= 大小控制雨滴的多少 >>> 返回图像大小的模糊噪声图像'''noise = np.random.uniform(0, 256, img.shape[0:2])# 控制噪声水平,取浮点数,只保留最大的一部分作为噪声v = value * 0.01noise[np.where(noise < (256 - v))] = 0# 噪声做初次模糊k = np.array([[0, 0.1, 0],[0.1, 8, 0.1],[0, 0.1, 0]])noise = cv2.filter2D(noise, -1, k)# 可以输出噪声看看'''cv2.imshow('img',noise)cv2.waitKey()cv2.destroyWindow('img')'''return noise

原始噪声如如左图,加上了k之后的初次高斯噪声图如右图(可点击放大查看):
 

2.生成雨滴模糊噪声

随后,需要对噪声拉长、旋转方向,模拟不同大小和方向的雨水。

def rain_blur(noise, length=10, angle=0,w=1):'''将噪声加上运动模糊,模仿雨滴>>>输入noise:输入噪声图,shape = img.shape[0:2]length: 对角矩阵大小,表示雨滴的长度angle: 倾斜的角度,逆时针为正w:      雨滴大小>>>输出带模糊的噪声'''#这里由于对角阵自带45度的倾斜,逆时针为正,所以加了-45度的误差,保证开始为正trans = cv2.getRotationMatrix2D((length/2, length/2), angle-45, 1-length/100.0)  dig = np.diag(np.ones(length))   #生成对焦矩阵k = cv2.warpAffine(dig, trans, (length, length))  #生成模糊核k = cv2.GaussianBlur(k,(w,w),0)    #高斯模糊这个旋转后的对角核,使得雨有宽度#k = k / length                         #是否归一化blurred = cv2.filter2D(noise, -1, k)    #用刚刚得到的旋转后的核,进行滤波#转换到0-255区间cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)blurred = np.array(blurred, dtype=np.uint8)'''cv2.imshow('img',blurred)cv2.waitKey()cv2.destroyWindow('img')'''return blurred

旋转不同方向和长度的雨滴效果如下:
 

3.图像叠加

最后对将生成的雨滴噪声和原始图像叠加即可得到模拟的下雨场景了。
第一种方式是利用逐个通道的像素与生成雨滴噪声进行操作,即在噪声中为黑色的位置,保留原图;有雨滴噪声的位置修改为带权重的雨滴噪声的纹理(赋值为噪声值):

def alpha_rain(rain,img,beta = 0.8):#输入雨滴噪声和图像#beta = 0.8   #results weight#显示下雨效果#expand dimensin#将二维雨噪声扩张为三维单通道#并与图像合成在一起形成带有alpha通道的4通道图像rain = np.expand_dims(rain,2)rain_effect = np.concatenate((img,rain),axis=2)  #add alpha channelrain_result = img.copy()    #拷贝一个掩膜rain = np.array(rain,dtype=np.float32)     #数据类型变为浮点数,后面要叠加,防止数组越界要用32位rain_result[:,:,0]= rain_result[:,:,0] * (255-rain[:,:,0])/255.0 + beta*rain[:,:,0]rain_result[:,:,1] = rain_result[:,:,1] * (255-rain[:,:,0])/255 + beta*rain[:,:,0] rain_result[:,:,2] = rain_result[:,:,2] * (255-rain[:,:,0])/255 + beta*rain[:,:,0]#对每个通道先保留雨滴噪声图对应的黑色(透明)部分,再叠加白色的雨滴噪声部分(有比例因子)cv2.imshow('rain_effct_result',rain_result)cv2.waitKey()cv2.destroyAllWindows()

第二种方式就是利用图像加权的方法,将雨滴图叠加到原图上。由于背景是黑色,所以调整后的图像亮度会下降,在某些场景下更适合雨天的模拟(乌云,光线暗)

def add_rain(rain,img,alpha=0.9):#输入雨滴噪声和图像#alpha:原图比例因子#显示下雨效果#chage rain into  3-dimenis#将二维rain噪声扩张为与原图相同的三通道图像rain = np.expand_dims(rain,2)rain = np.repeat(rain,3,2)#加权合成新图result = cv2.addWeighted(img,alpha,rain,1-alpha,1)cv2.imshow('rain_effct',result)cv2.waitKey()cv2.destroyWindow('rain_effct')

Fun Time

定义好了之前的函数后,就可以开始玩儿了。读入图像后,设置value大小控制雨滴数量,length大小控制雨水水痕长度,angle大小来控制雨下落的角度,w来控制雨点粗细程度。

img = cv2.imread('demo.jpeg')
noise = get_noise(img,value=500)
rain = rain_blur(noise,length=50,angle=-30,w=3)
alpha_rain(rain,img,beta=0.6)  #方法一,透明度赋值
#add_rain(rain,img)    #方法二,加权后有玻璃外的效果

太阳雨/雪

窗外淅淅沥沥的下雨:

暴雨来了!!!

数据增强:模拟雨天算法Python相关推荐

  1. 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码

    各位同学好,今天和大家分享一下目标检测算法中常用的图像数据增强方法 Mosaic.先放张图看效果.将四张图片缩放后裁剪拼接在一起,并调整检测框的坐标位置,处理位于图像边缘的检测框.文末有完整代码 1. ...

  2. 爬取新浪微博数据+新浪微博模拟登录+mysql+python

    小编的毕业设计是做一个关于网络社交平台的网络爬虫技术,所以需要爬取一些新浪微博数据. 不废话了,我先通过微博的高级搜索功能爬取数据,代码: #!usr/bin/env python #coding:u ...

  3. 数据增强_开源算法FMix:用于深度学习中增强混合样本数据增强

    作者 介绍 近来混合样本数据增强(MSDA)受到越来越多的关注,其中包括许多成功的变体,例如MixUp和Cut-Mix. 作者在论文中提出了FMix,它是一种MSDA,它使用将阈值应用于从傅立叶空间采 ...

  4. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  5. python图像增强_【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  6. 『红外图像 数据增强』DDE(Digital Detail Enhancement)算法

    DDE处理的细节 分离背景层和细节层:使用特殊的滤波器,将图像分成背景层和细节层.背景层通常包含低频信息,而细节层包含高频信息. 对背景层进行灰度增强:通过对背景层应用适当的灰度增强算法,提高背景层的 ...

  7. 正则化方法:数据增强、regularization、dropout

    文章目录 过拟合 overfitting 数据增强 正则化项 范数 norm L1 正则 Lasso regularizer L2 正则 Ridge Regularizer / Weight Deca ...

  8. python ssd目标检测_目标检测算法之SSD的数据增强策略

    前言 这篇文章是对前面<目标检测算法之SSD代码解析>,推文地址如下:点这里的补充.主要介绍SSD的数据增强策略,把这篇文章和代码解析的文章放在一起学最好不过啦.本节解析的仍然是上篇SSD ...

  9. python文本数据增强_CVPR2020场景文字数据增强(纯python实现)

    CVPR2020论文: Learn to Augment: Joint Data Augmentation and Network Optimization for TextLearn to Augm ...

  10. NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

    NLP专栏简介:数据增强.智能标注.意图识别算法|多分类算法.文本信息抽取.多模态信息抽取.可解释性分析.性能调优.模型压缩算法等 专栏链接:NLP领域知识+项目+码源+方案设计 订阅本专栏你能获得什 ...

最新文章

  1. cdh4.6.0升级测试1
  2. python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例
  3. C++STL中的vector
  4. ASP.NET MVC 线程和并发
  5. 设计一个可扩展的用户登录系统
  6. LeetCode 1143. 最长公共子序列(动态规划)
  7. cad2010多个文件并排显示_并排查看Excel工作表只需1个小动作,工作效率大涨百倍!...
  8. github push代码出错fatal: Authentication failed for ‘https:/
  9. 事件总线帧---Otto
  10. 张一鸣的心里“住着小马哥”
  11. 自学python免费教材-python零基础自学教材
  12. background-color:transparent
  13. MySQL字段根据逗号隔开查询
  14. 做平台玩手机创造内容,微软小冰的花式包抄
  15. Chrome自带滚动截图
  16. 芝加哥大学计算机应用数学专业排名,美国大学应用数学专业排名
  17. JAVA毕业设计国产精品动漫网站计算机源码+lw文档+系统+调试部署+数据库
  18. STC8G1K08上电复位时,P30,P31,P32同时为0,程序不能启动。
  19. markdown 摘记
  20. 大学物理 复习指导、公式推导精简过程、结论归纳 第四章 刚体和流体的运动

热门文章

  1. 【集合论】关系表示 ( 关系矩阵 | 关系矩阵示例 | 关系矩阵性质 | 关系矩阵运算 | 关系图 | 关系图示例 | 关系表示相关性质 )
  2. 如何实现批量截取整个网页完整长截图?内容很多很高浏览器看不全Chrome插件崩溃无需安FireShot,优爱酷批量长网页整页截图系统,设计师推荐的必备好工具好方法web2pic,html2jpeg
  3. VBA让Excel数据去重,数量相加
  4. F - 喜欢砍竹子的黑泽明
  5. Spire.Office for Java 7.10.FIX[7.9.9]-全新版
  6. android手机ipad传照片,教你iPhone与安卓跨平台如何传照片
  7. 北京IMAX影院全攻略
  8. python常用快捷键mac_Mac PHPStorm 常用快捷键,常用设置
  9. web绿色服务器单文件,Web个人临时共享服务器
  10. base64编码和解码算法