OpenCV7 形態學操作

2021-10-24 02:26:41 字數 4167 閱讀 9700

影象a和結構元素b,結構元素b在a上面移動,其中b定義其中心為錨點,計算b覆蓋下a的最大畫素值用來替換錨點的畫素

與膨脹操作類似以最小值替換錨點重疊下影象的畫素值

dilate(src, dst, kernel)

erode(src, dst, kernel)

獲取結構元素

getstructuringelement(int shape, size ksize, point anchor)

shape包括(morph_rect矩形\morph_cross十字形\morph_ellipse橢圓)

ksize值必須大於0且為奇數

anchor錨點預設是point(-1, -1)意思為中心畫素

動態調整結構元素大小

trackbar-createtrackbar(const string & trackbarname, const string winname, int* value, int count, trackbarcallback func, void* userdata = 0);

#include

#include

"opencv2/opencv.hpp"

using

namespace std;

using

namespace cv;

int current_size =3;

int max_size =8;

mat src, dst;

void

callback

(int

,void*)

;int

main()

namedwindow

("input"

, window_autosize)

;imshow

("input"

, src)

;namedwindow

("output"

, window_autosize)

;createtrackbar

("element size:"

,"output"

,¤t_size, max_size, callback)

;callback(0

,0);

waitkey(0

);return0;

}void

callback

(int

,void*)

先腐蝕後膨脹

可以去掉小的物件

線膨脹後腐蝕

可以填充小的洞

膨脹減去腐蝕,又稱為基本梯度

原影象與開操作的差值影象

閉操作影象與原影象的差值影象

morphologyex(src, dst, int op, kernel);

op包括morph_open、morph_close、morph_gradient、morph_tophat、morph_blackhat

kernel結構元素 getstructuringelement(int shape, size ksize, point anchor)

#include

#include

"opencv2/opencv.hpp"

using

namespace std;

using

namespace cv;

intmain()

namedwindow

("input"

, window_autosize)

;imshow

("input"

, src);

mat kernel =

getstructuringelement

(morph_rect,

size(11

,11),

point(-

1,-1

));//morphologyex(src, dst, morph_open, kernel);

//morphologyex(src, dst, morph_close, kernel);

//morphologyex(src, dst, morph_gradient, kernel);

//morphologyex(src, dst, morph_tophat, kernel);

morphologyex

(src, dst ,morph_blackhat, kernel)

;namedwindow

("output"

, window_autosize)

;imshow

("output"

, dst)

;waitkey(0

);return0;

}

原理

通過使用兩個最基本的形態學操作——膨脹與腐蝕,使用不同的結構元素實現對輸入影象的操作

步驟輸入影象彩色影象

轉換為灰度影象cvtcolor

轉換為二值影象adaptivethreshold

定義結構元素getstructuringelement

開操作(先腐蝕後膨脹)提取水平或者垂直線

adaptivethreshold(src, dst,

double maxvalue, //二值影象的最大值

int adaptivemethod, //自適應方法,目前只有兩種adaptive_thresh_mean_c和adaptive_thresh_gaussian_c

int thresholdtype, //閾值型別,選thresh_binary

int block size, //塊大小

double c

#include

#include

"opencv2/opencv.hpp"

using

namespace std;

using

namespace cv;

intmain()

namedwindow

("input"

, window_autosize)

;imshow

("input"

, src)

;cvtcolor

(src, dst, color_bgr2gray)

;imshow

("gray"

, dst)

; mat bin;

adaptivethreshold

(~dst, bin,

255, adaptive_thresh_mean_c, thresh_binary,25,

-9);

//~代表取反

imshow

("binary"

, bin)

; mat line;

//水平結構元素

mat hline =

getstructuringelement

(morph_rect,

size

(bin.cols /16,

1),point(-

1,-1

));//乙個畫素寬的水平線

//垂直結構元素

mat vline =

getstructuringelement

(morph_rect,

size(1

, bin.rows /16)

,point(-

1,-1

));//乙個畫素寬的垂直線

//矩形結構元素

mat rect =

getstructuringelement

(morph_rect,

size(3

,3),

point(-

1,-1

));morphologyex

(bin, line, morph_open, rect)

;//開操作

bitwise_not

(line, line)

;//取反

namedwindow

("output"

, window_autosize)

;imshow

("output"

, line)

;waitkey(0

);return0;

}

opencv 形態學操作

include include includeusing namespace std using namespace cv 開操作 先腐蝕後膨脹 作用 能夠去掉一些小的物件,保留大的物件 閉操作 先膨脹後腐蝕 作用 將小洞給填充上 形態學梯度 膨脹減去腐蝕 作用 求出邊緣 頂帽變換 原影象與開操作之...

opencv形態學操作

1.腐蝕和膨脹都是相對高亮部分的操作 2.開運算 先腐蝕後膨脹 把細微連在一起的兩塊目標分開了,消除暗背景下的較亮區域。閉運算,閉運算是對影象先膨脹後腐蝕 看上去將兩個細微連線的圖塊封閉在一起,閉運算可以用來消除噪音。因為先高亮部分膨脹抵消了小的黑點,大的黑點經過接下來的腐蝕又再次還原回去,小的黑點...

Opencv 形態學基礎操作

morphologyex src,dst,cv mop blackhat,kernel 操作介面 imshow str0utput,dst cv mop open 先腐蝕 後膨脹 去掉小的物件背景黑色 cv mop close 先腐蝕 後膨脹 去掉小的物件背景白色 cv mop gradient 膨...