使用python对图像加噪声

加上雨点噪声

python 复制代码
import cv2
import numpy as np
 
 
def get_noise(img, value=10):
    '''
    #生成噪声图像
    >>> 输入: img图像
        value= 大小控制雨滴的多少 
    >>> 返回图像大小的模糊噪声图像
    '''
 
    noise = np.random.uniform(0, 256, img.shape[0:2])
    # 控制噪声水平,取浮点数,只保留最大的一部分作为噪声
    v = value * 0.01
    noise[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

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)
    
    return blurred



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 channel
 
    rain_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.imwrite('rain_result.png', np.uint8(rain_result))


img = cv2.imread('cv.png')
noise = get_noise(img,value=500)
rain = rain_blur(noise,length=50,angle=-30,w=3)
alpha_rain(rain,img,beta=0.6)

加上光斑噪声

利用一张光斑的图像加在原始图像上:

python 复制代码
import numpy as np
import cv2
from PIL import Image

image1 = cv2.imread('cub1.jpg')
image2 = cv2.imread('ban.jpg')

height = image1.shape[0]
width = image1.shape[1]
image2 = cv2.resize(image2, (width, height), interpolation = cv2.INTER_LINEAR)
image = (image1 + image2) // 2

cv2.imwrite('cv.png', np.uint8(image))
相关推荐
今天炼丹了吗21 分钟前
RTDETR融合[WACV 2025]SEM-Net中的模块
python·深度学习·机器学习
CoovallyAIHub30 分钟前
无人机图像中的小目标检测新利器:深入解析 LAM-YOLO 模型
深度学习·算法·计算机视觉
这里有鱼汤1 小时前
一篇文章让你彻底搞懂量化中RSI指标,附实战策略+附源码,建议收藏
python
IIIIIII_II1 小时前
【视频格式转换】.264格式转为mp4格式
python·视频·格式转换
都叫我大帅哥1 小时前
LangChain的TXT文档加载:从入门到实战的终极指南
python·langchain
蹦蹦跳跳真可爱5891 小时前
Python----NLP自然语言处理(中文分词器--jieba分词器)
开发语言·人工智能·python·自然语言处理·中文分词
蹦蹦跳跳真可爱5891 小时前
Python----OpenCV(图像分割——彩色图像分割,GrabCut算法分割图像)
开发语言·图像处理·人工智能·python·opencv·计算机视觉
吃手机用谁付的款2 小时前
基于hadoop的竞赛网站日志数据分析与可视化(下)
大数据·hadoop·python·信息可视化·数据分析
Kyln.Wu2 小时前
【python实用小脚本-139】Python 在线图片批量下载器:requests+PIL 一键保存网络图像
数据库·python·php
Chef_Chen3 小时前
从0开始学习计算机视觉--Day09--卷积与池化
深度学习·学习·计算机视觉