学习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); //膨胀

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

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

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

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

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值