高斯模糊(英語:gaussian blur),通常用它來減少影象雜訊以及降低細節層次。這種模糊技術生成的影象,其視覺效果就像是經過乙個半透明的螢幕觀察影象。
在計算機視覺演算法中,高斯模糊通常用於預處理階段,降低高斯雜訊,以增強影象在不同比例大小下的影象效果。
若想更加細緻地了解高斯模糊原理,可以參考高斯模糊的演算法
高斯模糊主要用於濾除高斯雜訊,所以我們可以先在一張上製造高斯雜訊,步驟為:
1.獲取影象的高度、寬度、通道數;
2.遍歷影象的每乙個畫素,並獲取隨機數;
3.將隨機數加到原影象上,並保證畫素值的正確範圍;
4.顯示影象。
**如下:
def
clamp
(pv)
:# 保證rgb三色數值不超過255
if pv >
255:
return
255if pv <0:
return
0else
:return pv
defgaussian_noise
(image)
:# 高斯雜訊
h, w, c = image.shape # 獲取影象高度、寬度、通道
for row in
range
(h):
for col in
range
(w):
s = np.random.normal(0,
20,3)
# 獲取隨機數,3個數的陣列
b = image[row, col,0]
# 藍 g = image[row, col,1]
# 綠 r = image[row, col,2]
# 紅 image[row, col,0]
= clamp(b + s[0]
) image[row, col,1]
= clamp(g + s[1]
) image[row, col,2]
= clamp(r + s[2]
) cv.imshow(
"noise_image"
, image)
我們便可以看到以下效果,
原圖為:
加上高斯雜訊後
這種效果在我印象裡,曾經在讀小學時候舊電視出現過。
接下來,我們來了解高斯模糊api:
void gaussianblur(inputarray src, outputarray dst, size ksize, double sigmax, double sigmay=0, int bordertype=border_default);
引數如下:
src,輸入影象,即源影象;
dst,即目標影象,需要和源有一樣的尺寸和型別;
ksize,高斯核心的大小。其中ksize.width和ksize.height可以不同,但他們都必須為正數和奇數(約定俗成)。或者,它們可以是零的,它們都是由sigma計算而來;
sigmax,表示高斯核函式在x方向的的標準偏差;
sigmay,表示高斯核函式在y方向的的標準偏差。若sigmay為零,就將它設為sigmax,如果sigmax和sigmay都是0,那麼就由ksize.width和ksize.height計算出來。
相應的**如下:
dst = cv.gaussianblur(src,(9
,9),
0)cv.imshow(
"gaussian blur"
, dst)
此時的效果為:
可以看出,高斯雜訊被消除了許多。
import cv2 as cv # 匯入opencv模組
import numpy as np # 匯入數學函式庫
defclamp
(pv)
:# 保證rgb三色數值不超過255
if pv >
255:
return
255if pv <0:
return
0else
:return pv
defgaussian_noise
(image)
:# 高斯雜訊
h, w, c = image.shape # 獲取影象高度、寬度、通道
for row in
range
(h):
for col in
range
(w):
s = np.random.normal(0,
20,3)
# 獲取隨機數,3個數的陣列
b = image[row, col,0]
# 藍 g = image[row, col,1]
# 綠 r = image[row, col,2]
# 紅 image[row, col,0]
= clamp(b + s[0]
) image[row, col,1]
= clamp(g + s[1]
) image[row, col,2]
= clamp(r + s[2]
) cv.imshow(
"noise_image"
, image)
print
("------------hello python!------------"
)src = cv.imread(
"d:/opencv3/image/snow girl7.png"
)cv.namedwindow(
"input_image"
, cv.window_autosize)
cv.imshow(
"input_image"
, src)
t1 = cv.gettickcount(
)gaussian_noise(src)
t2 = cv.gettickcount(
)time =
(t2 - t1)
/ cv.gettickfrequency(
)print
("time consume: %s"
%(time *
1000))
dst = cv.gaussianblur(src,(9
,9),
0)cv.imshow(
"gaussian blur"
, dst)
cv.waitkey(0)
cv.destroyallwindows(
)# 釋放所有視窗
python opencv 安裝記錄及使用記錄
使用命令安裝 sudo apt get install python opencv之後如果使用的是pyenv裡面的anconda,需要複製 sudo cp usr lib python2.7 dist packages cv2.so pyenv versions anaconda lib pytho...
Python OpenCV學習(十二)Haar聯級
haar特徵 haar特徵是一種反映影象的灰度變化的,畫素分模組求差值的一種特徵。它分為三類 邊緣特徵 線性特徵 中心特徵和對角線特徵。用黑白兩種矩形框組合成特徵模板,在特徵模板內用 黑色矩形畫素和 減去 白色矩形畫素和來表示這個模版的特徵值。例如 臉部的一些特徵能由矩形模組差值特徵簡單的描述,如 ...
python opencv學習筆記(二)
影象與原始位元組之間的轉換 從概念上,乙個位元組能表示0到255的整數,通常乙個畫素每個通道由乙個位元組表示。乙個opencv影象是.array型別的二維或者三維陣列。8位的灰度影象是乙個含有位元組值得二維陣列。乙個24位的bgr影象是乙個三維陣列,也包含了位元組值,可以使用表示式訪問這些值,如im...