1. 程式人生 > 其它 >OpenCV之形態學梯度(C++實現)

OpenCV之形態學梯度(C++實現)

技術標籤:C++opencv影象處理c++opencv計算機視覺

影象的形態學梯度是膨脹圖與腐蝕圖之差,數學表示式是:

dst = grad(sec, element) = dilate(src, element) - erode(src, element)

對二值圖進行這一操作可以得到影象中白色區域的邊界,因此可以用形態學梯度來保留物體的邊界輪廓。

同樣有兩種方法實現,程式碼示例:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;
int main() {
    Mat srcImage;
    srcImage = imread("/Users/dwz/Desktop/cpp/b.jpg");

    Mat element;
    element = getStructuringElement(MORPH_RECT, Size(5, 5));

    Mat dstImage;
//    第一種實現方法
    morphologyEx(srcImage, dstImage, MORPH_GRADIENT, element);

//    第二種實現方法
//    Mat dilateImage, erodeImage;
//    dilate(srcImage, dilateImage, element);
//    erode(srcImage, erodeImage, element);
//    dstImage = dilateImage - erodeImage;
    imwrite("gradient.jpg", dstImage);
    return 0;
}

輸入;

輸出: