学习c++版opencv3.4之11-膨胀腐蚀

形态学操作。

膨胀:结构B在图像A上面移动,B的中心定义为锚点,计算B覆盖下A的最大像素值来替换锚点的像素,B的形状可以是任意的。膨胀类似于中值滤波时取最大值而不是中间值,且滤波时核的形状比较单一,但是膨胀中B的形状可以为矩形,圆形等。

Mat structure_element = getStructuringElement(MORPH_RECT, Size(3,3)); //定义B的形状及大小

dilate(src, dst, structure_element); //膨胀

学习c++版opencv3.4之11-膨胀腐蚀_第1张图片

腐蚀:结构B在图像A上面移动,B的中心定义为锚点,计算B覆盖下A的最小像素值来替换锚点的像素,B的形状可以是任意的。

Mat structure_element = getStructuringElement(MORPH_RECT, Size(3,3));

erode(src, dst2, structure_element); //腐蚀

学习c++版opencv3.4之11-膨胀腐蚀_第2张图片

#include 
#include 
#include 

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 
#include 
#include 

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;
}

学习c++版opencv3.4之11-膨胀腐蚀_第3张图片

 

你可能感兴趣的:(opencv)