opencv (2)

1、建立灰度化和噪声的子文件:gray_and_noise

#将一张图片灰度化,并添加椒盐噪声
import cv2
import numpy as np

#灰度化
def gray(img):
    row,col,tong = img.shape
    new = np.zeros((row,col,tong),np.uint8())
    for r in range(row):
        for c in range(col):
            the_value = 0.11*img[r,c,0] + 0.58*img[r,c,1] + 0.31*img[r,c,2]
            new[r,c]=np.uint8(the_value)
    return new

'''
添加椒盐噪声
椒盐噪声=椒噪声(0)+盐噪声(255),噪声值为0或255,假定它们等概率出现

'''
def add_salt(img,SNR): #SNR:信息噪声比 signal-noise rate
    row,col,tong = img.shape
    amount=row*col
    for i in range(int(amount*(1-SNR))):
        rand_x=np.random.randint(0,row)
        rand_y=np.random.randint(0,col)
        if np.random.random() <0.5: #np.random.random()可以生成一个0-1之间的浮点数
            value=0
        else:
            value=255
        img[rand_x,rand_y] = value
    return img

if __name__ =='__main__':
    img_1=cv2.imread('las.jpg',cv2.IMREAD_UNCHANGED)
    gray_jpg = gray(img_1)
    the_new = add_salt(gray_jpg,0.95)
    cv2.imshow('windows',the_new)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2、滤波方法子文件:filter_h

#滤波方法子文件
import cv2
import numpy as np

def trans(img): #将bgr转换为rgb,不转换也没什么影响
    img1=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    return img1

def blur_f(img): #均值滤波
    img1=trans(img)
    img2=cv2.blur(img1,(3,3)) #blur是模糊的意思
    return img2

def gauss_f(img): #高斯滤波
    img1=trans(img)
    img2=cv2.GaussianBlur(img1,(3,3),0) #0为方差,方差越小,偏离中心的像素权重会很小
    return img2
    
def med_f(img): #中值滤波
    img1=trans(img)
    img2=cv2.medianBlur(img1,3)
    return img2

3、主文件

import cv2
import numpy as np
import gray_and_noise as gn
import filter_h as fh

img=cv2.imread('las.jpg',cv2.IMREAD_UNCHANGED)
gray_pic=gn.gray(img)
noise_pic=gn.add_salt(gray_pic,0.96)
cv2.imshow('pic',noise_pic)

#调用滤波函数

result1=fh.blur_f(noise_pic) #均值滤波
cv2.imshow('result1',result1)

result2=fh.gauss_f(noise_pic) #高斯滤波
cv2.imshow('gauss',result2)

result3=fh.med_f(noise_pic)
cv2.imshow('med',result3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值