(四)opencv入门之图像的形态学基本操作-----膨胀(dilate)和腐蚀(erode)函数原型及代码实现(C++)

图像形态学的基本操作:腐蚀、膨胀。

图像的膨胀和腐蚀使用的函数为dilate和erode,以下是函数的原型:

void dilate //erode
(
	InputArray src,        //输入源图像,填Mat类的图像即可,图像的通道数量是任意的
	OutputArray dst,    //目标图像,需要和源图像有一样的尺寸和类型
	InputArray kernel,  //膨胀操作的核。当此值为NULL时,表示的是使用参考点位于中心3*3的核
	Point anchor = Point(-1, -1), //Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心
	int iterations=1,     //表示dilate的次数,默认值为1
	int borderType = BORDER_CONSTANT, //用于推断图像外部像素某种边界模式,默认值为BORDER_DEFAULT
)

代码实现:

#include "pch.h"
#include <core.hpp>   
#include <highgui.hpp>  
#include <imgproc.hpp> 
#include <opencv2/imgproc/types_c.h>  


using namespace std;
using namespace cv;

int main()
{
	//读取一张图片
	Mat img=imread("D:\\Visual Studio project\\ConsoleApplication2\\风景.jpg");
	//创建窗口
	namedWindow("原图", WINDOW_NORMAL);
	//将窗口调整成512*512
	resizeWindow("原图", 512, 512);
	//显示原图
	imshow("原图",img);
    //获取一个自定义的核,getStructuringElement表示cv中获取自定义核,MORPH_RECT核定义为方形,大小为10*10
	Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));  
	Mat after_dilate;
	Mat after_erode;
	//进行膨胀和腐蚀操作,2表示腐蚀2次
	dilate(img, after_dilate, element, Point(-1, -1),2, BORDER_CONSTANT);
    erode(img, after_erode, element,Point(-1,-1),2,BORDER_CONSTANT);
    //创建新的窗口
	namedWindow("膨胀图", WINDOW_NORMAL);
	resizeWindow("膨胀图", 512, 512);
	//显示膨胀图
	imshow("膨胀图", after_dilate);
    
	//再创建一个窗口
	namedWindow("腐蚀图", WINDOW_NORMAL);
	resizeWindow("腐蚀图", 512, 512);
	//显示腐蚀图
	imshow("腐蚀图", after_erode);

	waitKey(0);
	return 0;

}

输出结果:
在这里插入图片描述

参考文章:https://blog.csdn.net/qq_41553038/article/details/80048510

发布了8 篇原创文章 · 获赞 12 · 访问量 787

猜你喜欢

转载自blog.csdn.net/ZJ_____W/article/details/103225977
今日推荐