影象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 膨...