Python OpenCV寫椒鹽雜訊和高斯雜訊

2021-08-31 18:37:01 字數 2984 閱讀 6155

import cv2

import numpy as np

import random

import tkinter

import math

def rgb2gray(rgb):

gray = np.zeros((rgb.shape[0],rgb.shape[1],1),np.uint8) # 建立影象變數,防止gray的改變導致如果把原圖的改變

for i in range(rgb.shape[0]):

for j in range(rgb.shape[1]):

gray[i,j] = 0.299 * rgb[i, j, 0] + 0.587 * rgb[i, j, 1] + 0.114 * rgb[i, j, 2]

return gray

def gauss_random(mu,sigem): # x是隨機變數,mu是均值,sigema是方差

x = random.uniform(mu,sigem*sigem)

t1 = (x-mu)*(x-mu)

t2 = 2*sigem*sigem

t3 = math.exp(-(t1/t2))

t4 = sigem*math.sqrt(2*math.pi)

f = 1/t4 * t3

return f

def gauss(gray,m,s,k): #高斯雜訊就是雜訊是按照高斯分布,分布在影象上的,是黑色的

gauss_p = gray*1

for i in range(gauss_p.shape[0]):

for j in range(gauss_p.shape[1]):

temp = gauss_p[i,j] + gauss_random(m,s)*k

if temp < 0:

temp = 0

elif temp > 255:

temp = 255

gauss_p[i,j] = temp

return gauss_p

def salt(gray):

salt_p = gray*1

for i in range(6000):

addx = random.randint(0, salt_p.shape[0] - 1) #產生隨機整數 用於確定x和y的位置,即畫素的位置

addy = random.randint(0, salt_p.shape[1] - 1)

if random.randint(0,1) == 0 :

salt_p[addx,addy] = 0

else:

salt_p[addx,addy] = 255

return salt_p

def img(m,s,k):

m=int(m)

s=int(s)

k = int(k)

img = cv2.imread("d:/5.rgb")

gray = rgb2gray(img)

print(gray.shape[0],gray.shape[1])

salt = salt(gray)

gauss = gauss(gray,m,s,k)

cv2.imshow("gray",gray)

cv2.imshow("salt",salt)

cv2.imshow("gauss",gauss)

cv2.waitkey(0)

cv2.destroyallwindows()

def input():

mu = enters1.get()

sigem = enters2.get()

k = enters3.get()

img(mu,sigem,k)

root = tkinter.tk()

s1 = tkinter.stringvar(value='')

s2 = tkinter.stringvar(value='')

s3 = tkinter.stringvar(value='')

labels1 = tkinter.label(root,text = 'μ:',justify = tkinter.right,width = 80)

labels1.place(x = 10,y = 5,width = 80,height = 20)

enters1 = tkinter.entry(root,width = 80,textvariable = s1)

enters1.place(x = 100,y = 5,width = 80,height = 20)

labels2 = tkinter.label(root,text = 'σ:',justify = tkinter.right,width = 80)

labels2.place(x = 10,y = 30,width = 80,height = 20)

enters2 = tkinter.entry(root,width = 80,textvariable = s2)

enters2.place(x = 100,y =30 ,width = 80,height = 20)

labels3 = tkinter.label(root,text = 'k :',justify = tkinter.right,width = 80)

labels3.place(x = 10,y = 55,width = 80,height = 20)

enters3 = tkinter.entry(root,width = 80,textvariable = s3)

enters3.place(x = 100,y = 55,width = 80,height = 20)

buttonok = tkinter.button(root,text = '確定',command = input)

buttonok.place(x=90,y=90,width = 50,height = 30)

root.mainloop()

高斯雜訊和椒鹽雜訊python

高斯雜訊的 如下 def gaussiannoise src,means,sigma noiseimg src rows noiseimg.shape 0 cols noiseimg.shape 1 for i in range rows for j in range cols noiseimg i...

python opencv 安裝整理

這兩天比較有空,在公司內想學習一下opencv,又不想安裝vc 所以就那個python看opencv。安裝環境本來很簡單 但是我python是64的 估計也很多 而opencv的安裝要有乙個numpy庫 這個在官網上只有32位的 所以,事情變得複雜起來。網上找了一下,只道有提供64位版的numpy庫...

python opencv 輪廓檢測

輪廓 contours 指的是有相同顏色或者密度,連線所有連續點的一條曲線。檢測輪廓的工作對形狀分析和物體檢測與識別都非常有用。在輪廓檢測之前,首先要對進行二值化或者canny邊緣檢測。在opencv中,尋找的物體是白色的,而背景必須是黑色的,因此預處理時必須保證這一點。import cv2 讀入i...