/* 一、開運算: (1)開運算,其實就是先腐蝕后膨脹的過程。 (2)數學表達式:dst = open(src,element) = dilate(erode(src,element)) (3)作用:開運算平滑物體的輪廓,斷開較窄的狹頸,消除細的突出物 (4)核心API函數:morphologyEx() [詳見《opencv3編程入門》 P205 ] (5)morphologyEx()可取標識符 MORPH_OPEN 二、閉運算: (1)閉運算,其實就是先膨脹后腐蝕的過程; (2)數學表達式:dst = open(src,element) = erode(dilate(src,element)) (3)作用:閉運算同樣也可以平滑輪廓的一部分,與開運算相反 通常會彌合較窄的間斷和細長的溝壑,消除小的孔洞,填補輪廓線中的斷裂 (4)核心API函數:morphologyEx() [詳見《opencv3編程入門》 P205 ] (5)morphologyEx()可取標識符 MORPH_CLOSE */ /*******開運算、閉操作相關程序示例*********/ /*******為了盡可能減少圖片的失真****/ /*******程序按照數字圖像處理書中的操作流程用opencv實現(P410)***********/ #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat srcImage = imread("/home/ttwang/11.tif");//讀入原圖 namedWindow("[原圖]"); imshow("[原圖]",srcImage); //獲取自定義核 Mat element = getStructuringElement(MORPH_RECT,Size(3,3)); Mat dstImage1; Mat dstImage2; Mat dstImage3; Mat dstImage; //先進行腐蝕操作 erode(srcImage,dstImage1,element); namedWindow("腐蝕操作[效果圖]"); imshow("腐蝕操作[效果圖]",dstImage1); //由運行結果看,背景噪聲在該階段就被消除了 //對腐蝕后的圖像,進行開運算操作 morphologyEx(dstImage1,dstImage2,MORPH_OPEN,element); namedWindow("開運算操作[效果圖]"); imshow("開運算操作[效果圖]",dstImage2); //對dstImage2圖像,進行膨脹處理 dilate(dstImage2,dstImage3,element); namedWindow("膨脹操作[效果圖]"); imshow("膨脹操作[效果圖]",dstImage3); //對dstImage3圖像進行閉運算操作, morphologyEx(dstImage3,dstImage,MORPH_CLOSE,element); namedWindow("閉運算操作[效果圖]"); imshow("閉運算操作[效果圖]",dstImage); waitKey(0); return 0; }
[原圖]
腐蝕操作[效果圖]
開運算操作[效果圖]
膨脹操作[效果圖]
閉運算操作[效果圖]





