OpenCV学习 day5 形态学操作

图像的形态学操作——基于形状的一系列的图像处理操作合集

形态学的四个基本操作:膨胀、腐蚀、开、闭

1. 膨胀dilate

B覆盖下的A中最大像素值代替锚点像素,像素值整体变大

结构型元素定义:

Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));

shape-可以是矩形,也可以是椭圆等  通过MORPH_*查看

ksize-是结构型元素大小

anchor-默认是(-1,-1)中心

膨胀操作:

void dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor = Point(-1,-1), int iterations = 1,
                          int borderType = BORDER_CONSTANT,
                          const Scalar& borderValue = morphologyDefaultBorderValue() );

kernel-就是定义的结构型元素

iterations-迭代运行几次

2. 腐蚀erode

B覆盖下的A中最小像素值代替锚点像素,像素值整体变小

 

void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );

demo:

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

using namespace std;
using namespace cv;

Mat src, d_dst, r_dst, dst, bt_dst;
char OUTPUT[] = "dilate image";
int element_size = 3;
int max_size = 15;
void CallBack_Demo(int, void*);

int main(int argc, char** argv) {
    
    src = imread("D:/learning/image/5.jpg", WINDOW_AUTOSIZE);
    if (src.empty()) {
        printf("can not found image...\n");
        return -1;
    }

    namedWindow(OUTPUT);
    //设置拖动滑块控制size大小
    createTrackbar("Element size:", OUTPUT, &element_size, max_size, CallBack_Demo);
    CallBack_Demo(0, 0);

    waitKey(0);
    return 0;
}

//
void CallBack_Demo(int, void*) {
    int s = element_size * 2 + 1;
    //定义结构型元素
    Mat structure_element = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
    //dilate(src, dst, structure_element, Point(-1, -1), 1); //膨胀
    erode(src, dst, structure_element, Point(-1, -1), 1);  //腐蚀
    imshow(OUTPUT, dst);
    return;
}

其中createTrackbar函数创建一个滑块,用来控制膨胀腐蚀操作中的参数,效果如下图所示:

3. 开open

猜你喜欢

转载自www.cnblogs.com/happyfan/p/12056241.html
今日推荐