opencv3.2.0形態學濾波之開運算、閉運算


/*
    一、開運算:
    (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;
}

[原圖]

腐蝕操作[效果圖]

開運算操作[效果圖]

膨脹操作[效果圖]

閉運算操作[效果圖]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM