1. 程式人生 > >學習c++版opencv3.4之10-膨脹腐蝕

學習c++版opencv3.4之10-膨脹腐蝕

形態學操作。

膨脹:結構B在影象A上面移動,B的中心定義為錨點,計算B覆蓋下A的最大畫素值來替換錨點的畫素,B的形狀可以是任意的。膨脹類似於中值濾波時取最大值而不是中間值,且濾波時核的形狀比較單一,但是膨脹中B的形狀可以為矩形,圓形等。

腐蝕:結構B在影象A上面移動,B的中心定義為錨點,計算B覆蓋下A的最小畫素值來替換錨點的畫素,B的形狀可以是任意的。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;

int main(){
    Mat src, dst, dst2;
    src = imread("/Users/ming/Documents/test.jpg");
    if (!src.data){
        printf("cannot load image ...");
        return -1;
    }
    namedWindow("src img", CV_WINDOW_AUTOSIZE);
    imshow("src img", src);
    
    Mat structure_element = getStructuringElement(MORPH_RECT, Size(3,3)); //設定膨脹/腐蝕的核為矩形,大小為3*3
    dilate(src, dst, structure_element); //膨脹
//    erode(dst, dst, structure_element); //先膨脹後腐蝕
    namedWindow("dilate img", CV_WINDOW_AUTOSIZE);
    imshow("dilate img", dst);
    
    erode(src, dst2, structure_element); //腐蝕
    namedWindow("erode img", CV_WINDOW_AUTOSIZE);
    imshow("erode img", dst2);
    
    waitKey(0);
    return 0;
}

使用createTrackbar建立滑動按鈕,動態調節腐蝕引數。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;

void callback_demo(int ,void*);
int element_size = 1, max_size = 10;
string window_name = "dilate img";
Mat src ,dst;
int main(){
    src = imread("/Users/ming/Documents/test.jpg");
    if (!src.data){
        printf("cannot load image ...");
        return -1;
    }
    namedWindow("src img", CV_WINDOW_AUTOSIZE);
    imshow("src img", src);
    
    namedWindow(window_name, CV_WINDOW_AUTOSIZE);
    createTrackbar("element size", window_name, &element_size, max_size, callback_demo);  //利用回撥函式建立滑動按鈕示例
    callback_demo(0, 0);
    
    waitKey(0);
    return 0;
}
void callback_demo(int, void*){
    cout << "element_size: " << element_size << endl;
    int s = element_size * 2 + 1;
    Mat structure_element = getStructuringElement(MORPH_RECT, Size(s,s)); //設定膨脹/腐蝕的核為矩形,大小為3*3
    dilate(src, dst, structure_element); //膨脹
//    erode(src, dst, structure_element); //腐蝕
    imshow(window_name, dst);
    return;
}