模糊操作的作用是在時減低雜訊。
模糊操作有均值模糊,中值模糊,高斯模糊和自定義模糊
模糊操作的基本原理:
1、基於離散卷積
2、定義好每乙個卷積核
3、不同的卷積核得到不同的卷積效果
4、模糊是卷積的一種表象
均值濾波:用卷積核中的全體畫素的平均值來代替原來畫素值
中值濾波:將卷積核中的全體畫素從小到大排序,保留中值
高斯濾波:
具體**:
importcv2ascvimportnumpyasnp
#均值模糊
defblur_demo(img):
dst = cv.blur(img,(5,5))
cv.imshow('blur_dome',dst)
#中指模糊
defmedian_blur_demo(img): #中指模糊 對椒鹽模糊 效果最好
dst = cv.medianblur(img,5)
cv.imshow('median_blur_dome',dst)
#防止數值超出範圍
defclamp(pv):
ifpv > 255:
return255
ifpv < 0:
return0
else:
returnpv
#高斯模糊
defgaussian_noise(img):
h ,w ,c = img.shape
forrowinrange(h):
forcolinrange(w):
s = np.random.normal(0,20,3)
b = img[row, col, 0] # blue
g = img[row, col, 1] # green
r = img[row, col, 2] # red
# 為了防止操作後的數值超出範圍,增加乙個判斷函式
img[row, col ,0] = clamp(b + s[0])
img[row, col, 1] = clamp(g + s[1])
img[row, col, 2] = clamp(r + s[2])
cv.imshow('noise img',img)
dst = cv.gaussianblur(img,(5,5),0)
#高斯模糊函式會根據x計算sigma 根據sigma計算x 所以兩個引數只用確定乙個
cv.imshow('gaussian blur',dst)
#自定義模糊
defcustom_blur_demo(img):
# kennel = np.ones([5,5],np.float32)/25
#卷積核大小是5*5 引數型別規定為float32 因為這裡我們想做均值模糊 所以必須再除以5*5
kennel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32) #固定寫法 表示銳化操作,可以使影象更立體
dst = cv.filter2d(img,-1,kennel) #-1 就表示和原圖一樣
cv.imshow('custom_blur_demo',dst)
img = cv.imread('img/lena.png')
cv.namedwindow('img',cv.window_autosize)
cv.imshow('img',img)
# blur_demo(img)
# median_blur_demo(img)
t1 = cv.gettickcount()
gaussian_noise(img)
t2 = cv.gettickcount()
time = (t2-t1)/cv.gettickfrequency()
print('time consume :%s '% (time*1000) )
cv.waitkey(0)
cv.destroyallwindows()
OpenCV實現模糊操作
模糊操作的基本原理 1.基於離散卷積,2.定義好每個卷積核,3.不同卷積核得到不同的卷積效果,4.模糊是卷積的一種表象 import cv2 as cv import numpy as np def blur demo image 均值模糊 dst cv.blur image,5,5 5,5 模糊引...
學習OpenCV 羽化(模糊邊緣)
原文出處 在photoshop裡,羽化就是使你選定範圍的圖邊緣達到朦朧的效果。羽化值越大,朦朧範圍越寬,羽化值越小,朦朧範圍越窄。可根據你想留下圖的大小來調節。演算法分析 1 通過對rgb值增加額外的v值實現朦朧效果 2 通過控制v值的大小實現範圍控制。3 v 255 當前點point距中點距離的平...
OpenCV學習之平滑(模糊)
void boxfilter inputarray src,outputarray dst,int ddepth,size ksize,point anchor point 1,1 意味著定位畫素是核的中心 bool normalize true int bordertype border defa...