OpenCV之形態學梯度(C++實現)
阿新 • • 發佈:2020-12-20
技術標籤: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; }
輸入;
輸出: