OpenCV11 邊緣處理

2021-10-24 06:51:22 字數 2018 閱讀 5177

影象卷積的時候邊界畫素,不能被卷積操作,原因在於邊界畫素沒有完全跟kernel重疊,所以當3x3濾波時候有1個畫素的邊緣沒有被處理,5x5濾波的時候有2個畫素的邊緣沒有被處理。

border_constant 填充邊緣用指定畫素

border_replicate 填充邊緣畫素用已知的邊緣畫素值

border_wrap 用另一邊的畫素來補償填充

copymakeborder(

src, dst

int top, int bottom, int left, int right //邊緣長度,一般上下左右都取相同的值

int bordertype //邊緣型別

scalar value)

幾種邊緣處理對比

#include

#include

"opencv2/opencv.hpp"

using

namespace std;

using

namespace cv;

intmain()

namedwindow

("input"

, window_autosize)

;imshow

("input"

, src)

;char output=

"output"

;int top =

int(src.rows *

0.05);

int bottom =

int(src.rows *

0.05);

int left =

int(src.cols *

0.05);

int right =

int(src.cols *

0.05);

namedwindow

(output, window_autosize)

;int c =0;

int bordertype = border_default;

rng rng

(12345);

while

(true

)elseif(

(char

)c ==

'c')

elseif(

(char

)c ==

'r')

elseif(

(char

)c ==

'w')

scalar color =

scalar

(rng.

uniform(0

,255

), rng.

uniform(0

,255

), rng.

uniform(0

,255))

;copymakeborder

(src, dst, top, bottom, left, right, bordertype, color)

;imshow

(output, dst);}

waitkey(0

);return0;

}

邊緣處理例項
#include

#include

"opencv2/opencv.hpp"

using

namespace std;

using

namespace cv;

intmain()

namedwindow

("input"

, window_autosize)

;imshow

("input"

, src)

;gaussianblur

(src, dst,

size(3

,3),

0,0, border_reflect)

;imshow

("output"

, dst)

;waitkey(0

);return0;

}

opencv邊緣處理

影象卷積的時候邊界畫素,不能被卷積操作,原因在於邊界畫素沒有完全跟 kernel 重疊,所以當 3x3濾波時候有 1個畫素的邊緣沒有被處理,5x5濾波的時候有 2個畫素的邊緣沒有被處理。在卷積開始之前增加邊緣畫素,填充的畫素值為0或者 rgb黑色,比如 3x3在四周各填充1 個畫素的邊緣,這樣就確保...

opencv 邊緣羽化,邊緣過渡

當把前景和背景分開時,黑色代表背景,白色代表前景,如下圖1 記作img1 為了平滑過渡,做邊緣羽化,結果如下圖2 記作img2 即可從圖1得到圖2 有了圖2,就可以把黑色部分替換成你所需的背景,白色部分替換成前景,過度部分按畫素比例分給前景和背景 原理 cv blur是均值平滑 cvsmooth i...

opencv016 處理邊緣

卷積邊緣問題 l影象卷積的時候邊界畫素,不能被卷積操作,原因在於邊界畫素沒有完全跟 kernel 重疊,所以當 3x3濾波時候有 1個畫素的邊緣沒有被處理,5x5濾波的時候有 2個畫素的邊緣沒有被處理。處理邊緣 在卷積開始之前增加邊緣畫素,填充的畫素值為0或者 rgb黑色,比如 3x3在 四周各填充...