opencv邊緣處理

2021-10-06 09:17:38 字數 2265 閱讀 7356

影象卷積的時候邊界畫素,不能被卷積操作,原因在於邊界畫素沒有完全跟

kernel

重疊,所以當

3x3濾波時候有

1個畫素的邊緣沒有被處理,

5x5濾波的時候有

2個畫素的邊緣沒有被處理。

在卷積開始之前增加邊緣畫素,填充的畫素值為0或者

rgb黑色,比如

3x3在四周各填充1

個畫素的邊緣,這樣就確保影象的邊緣被處理,在卷積處理之後再去掉這些邊緣。opencv

中預設的處理方法是:

border_default

,此外

常用的還有如下幾種: -

border_constant

填充邊緣用指定畫素值 -

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

- border_wrap

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

copymakeborder(

- mat src, // 輸入影象

- mat dst, // 新增邊緣影象

- int top, // 邊緣長度,一般上下左右都取相同值,

- int bottom,

- int left,

- int right,

- int bordertype // 邊緣型別

- scalar value

**部分:

// opencv0017.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include using namespace cv;

int main()

char input_win = "input image";

char output_win = "border demo";

namedwindow(input_win, cv_window_autosize);

namedwindow(output_win, cv_window_autosize);

imshow(input_win, src);

int top = int(0.05 * src.rows); //row 行 col 列

int bottom = int(0.05 * src.rows);

int left = int(0.05 * src.cols);

int right = int(0.05 * src.cols);

rng rng(12345);

int bordertype = border_default; //預設填充

int c = 0;

while (true)

if ((char)c == 'r')

else if ((char)c == 'w')

else if ((char)c == 'c')

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_win, dst);

} return 0;

}

結果圖: 

給新增邊框,你學會了嗎,哈哈,一起加油吧。 

OpenCV11 邊緣處理

影象卷積的時候邊界畫素,不能被卷積操作,原因在於邊界畫素沒有完全跟kernel重疊,所以當3x3濾波時候有1個畫素的邊緣沒有被處理,5x5濾波的時候有2個畫素的邊緣沒有被處理。border constant 填充邊緣用指定畫素 border replicate 填充邊緣畫素用已知的邊緣畫素值 bor...

opencv 邊緣羽化,邊緣過渡

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

opencv016 處理邊緣

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