Opencv學習(二)形態學操作
阿新 • • 發佈:2021-06-11
(一)定義結構元素
可以通過形態學處理,使其變得豐滿,或者去除掉多餘的畫素。
結構元素可以簡單定義為:畫素的組合(如下圖)
(二)膨脹和腐蝕
在形態學中,通常使用二值影象作為輸入影象。在二值影象中,習慣用黑色(低畫素值)表示背景物體,白色(高畫素值)表示前景物體。
2.1 膨脹
是取核中(即上面的3x3矩陣中)畫素值的最大值代替錨點位置的畫素值,這樣會使影象中較亮的區域增大,較暗的區域減小。如果是一張黑底,白色前景的二值圖,就會使白色的前景物體顏色面積變大,就像膨脹了一樣。
Mat dialated; //目標影象 dilate(image, dialated, Mat(),Point(-1,-1),5); imshow("dialated", dialated);
2.2 腐蝕
腐蝕操作類似於中值平滑,也有一個核,但不進行卷積運算,而是取核中畫素值的最小值代替錨點位置的畫素值,這樣就會使影象中較暗的區域面積增大,較亮的的區域面積減小。如果是一張黑底,白色前景的二值圖,就會使白色的前景物體顏色變小,就像被腐蝕了一樣。
Mat eroded;//目標影象 Mat element(4, 4,CV_8U);//核大小 erode(image, eroded, Mat()); imshow("eroded", eroded);
2.3 開運算
先進行腐蝕操作,後進行膨脹操作,主要用來去除一些較亮的部分
Mat opened; morphologyEx(image, opened, MORPH_OPEN, Mat()); imshow("opened", opened);
2.4 閉運算
先進行膨脹操作,後進行腐蝕操作,主要用來去除一些較暗的部分。
Mat closed; morphologyEx(image, closed, MORPH_CLOSE, element, Point(-1, -1), 5); imshow("closed", closed);
2.5 梯度運算
膨脹運算結果減去腐蝕運算結果,可以拿到輪廓資訊。
Mat result; morphologyEx(image, result, MORPH_GRADIENT, Mat(),Point(-1,-1),5); imshow("result", result);
2.6頂帽運算
原始影象減去開運算結果
即:原始帶刺的-不帶刺的=刺
Mat tophat; morphologyEx(image,tophat, MORPH_TOPHAT, Mat()); imshow("tophat", tophat);
2.7黑帽運算
原始輸入-閉運算結果
Mat blackhat; morphologyEx(image, blackhat, MORPH_BLACKHAT, Mat()); imshow("blackhat", blackhat);
(三)應用例項
提取出文字下劃線
void QuickDemo::pengzhanglianxi_demo(Mat& image) { imshow("image", image); Mat img,img_thr,kernel,dst; cvtColor(image, img, COLOR_RGB2GRAY); threshold(img, img_thr, 127, 255, THRESH_BINARY); kernel = getStructuringElement(MORPH_RECT, Size(30, 1)); //ksize – Size of the structuring element. //cols – Width of the structuring element //rows – Height of the structuring element dilate(img_thr, dst, kernel); imshow("img_thr", img_thr); imshow("dst", dst); }