用到的包
import cv2
import numpy as np
初次模糊
def get_noise(img,value = 10):
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):
trans = cv2.getRotationMatrix2D((length / 2,length / 2),angle - 45,1 - length / 100)
dig = np.diag(np.ones(length))
k = cv2.warpAffine(dig,trans,(length,length))
k = cv2.GaussianBlur(k,(w,w),0)
blurred = cv2.filter2D(noise,-1,k)
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):
rain = np.expand_dims(rain,2)
rain_effect = np.concatenate((img,rain),axis = 2)
rain_result = img.copy()
rain = np.array(rain,dtype = np.float32)
rain_result[:,:,0] = rain_result[:,:,0] * (255 - rain[:,:,0]) / 255 + 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]
#把图像设定为灰度
#rain_result = cv2.cvtColor(rain_result,cv2.COLOR_RGB2GRAY)
cv2.imshow('rain_effct_result',rain_result)
k = cv2.waitKey()
#按s保存图片
if k == ord('s'):
cv2.imwrite('girl_1.jpeg',rain_result,[int(cv2.IMWRITE_JPEG_QUALITY),100])
cv2.destroyWindow('rain_effct_result')
else:
cv2.destroyWindow('rain_effct_result')
第二种效果
def add_rain(rain,img,alpha = 0.9):
rain = np.expand_dims(rain,2)
rain = np.repeat(rain,3,2)
result = cv2.addWeighted(img,alpha,rain,1 - alpha,1)
#result = cv2.cvtColor(result,cv2.COLOR_RGB2GRAY)
cv2.imshow('rain_effct',result)
k = cv2.waitKey()
if k == ord('s'):
cv2.imwrite('girl_2.png',result,[int(cv2.IMWRITE_PNG_COMPRESSION),3])
cv2.destroyWindow('rain_effct')
else:
cv2.destroyWindow('rain_effct')
开始运行
img = cv2.imread('girl.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)
静态文件
效果1
效果2
似乎不能上传png文件,所以改成了jpg格式