opencv 图像的膨胀和腐蚀(一)

膨胀腐蚀概述
**膨胀和腐蚀是形态学的操作,简单来说就是基于形状的一系列图像处理操作
**膨胀腐蚀是基于高亮部分(白色)操作的,膨胀是对高亮部分进行膨胀,类似“”领域扩张,腐蚀是高亮部分被腐蚀,类似领域被蚕食
膨胀腐蚀的应用和 功能:
消除噪声
分割独立元素或连接相邻元素
寻找图像中的明显极大值,极小值区域
求图像的 梯度
其他相关:
开运算,闭运算
顶帽,黑帽
形态学 梯度
1)膨胀—dilate()
膨胀就是求局部最大值的操作,从数学角度上来讲,膨胀或腐蚀就是将图像(或区域)A与核B进行卷积。。
核可以是任意大小和形状,他有一个独立定义的参考点(锚点),多数情况下,核是一个小的中间带参考点(锚点),多数情况下,核是一个小的中间带参考点和实心正方形或者圆盘,可以看做是一个模板或掩码
膨胀就是求局部最大值的操作,核B与图形卷积,即核B覆盖的区域的像素点的最大值,并把这个最大值复制给参考点指定的像素点,这样会把图像中的高亮区域逐渐增长
void dilate(InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1),int iterations=1,int borderType=BORDER_CONSTANT,
const Scalar &borderValue=morphologyDefaultBorderValue());
**src :输入原图像(建议为二值图)
**dst:输出图像要求和src一样的尺寸和类型
**Kernel:膨胀操作的核,当为NULL,表示使用参考点位于中心的3*3的核,一般使用getStructing,Element 获取指定形状和尺寸的结构元素(核)
//!shape of the structuring element
enum{MORPH_RECT=0,MORPH_CROSS=1,MORPH_ELLIPSE=2};
矩形 交叉形 椭圆形
Mat getStructuringElement(int shape,Size ksize,Point anchor=Point(-1,-1));
**ksize和anchor 分别表示内核尺寸和锚点位置
**anchor:锚点位置,默认值Point(-1,-1)表示位于中心
**interations:膨胀的次数
**borderType:边界模式,一般采取默认值
**borderValue:边界值,一般采取默认值
2)腐蚀————erode()
腐蚀和膨胀相反,是取局部最小值,高亮区域逐渐减少
函数原型:
void erode(InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1),int iteratons=1,int borderType=BORDER_CONSTANT,
const Scalar &borderValue=morphologyDefaultBorderValue());

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 OpenCV 在 Visual Studio 中实现图像膨胀腐蚀处理,需要按照以下步骤进行操作: 1. 下载和安装 OpenCV 库:您可以从官方网站下载 OpenCV 库并按照官方文档中的说明进行安装。 2. 创建一个新的 Visual Studio 项目并将其配置为使用 OpenCV 库:您需要在项目属性中添加包含和库目录,并在链接器中添加所需的库文件。 3. 在代码中包含 OpenCV 库文件:您需要在代码中添加包含 OpenCV 库文件的头文件。 4. 加载图像并创建一个核:您需要使用 OpenCV 中的“imread”函数加载图像,并创建一个核来进行膨胀腐蚀处理。 5. 膨胀腐蚀处理:您需要使用 OpenCV 中的“dilate”和“erode”函数来进行膨胀腐蚀处理。这些函数需要传递图像和核作为参数,以及一些其他的可选参数,例如膨胀腐蚀的次数。 以下是一个使用 OpenCV 在 Visual Studio 中进行图像膨胀腐蚀处理的示例代码: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { // 加载图像 Mat image = imread("image.jpg", IMREAD_GRAYSCALE); // 创建一个核 Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5)); // 膨胀处理 Mat dilated_image; dilate(image, dilated_image, kernel, Point(-1, -1), 1); // 腐蚀处理 Mat eroded_image; erode(image, eroded_image, kernel, Point(-1, -1), 1); // 显示原图和处理后的图像 imshow("Original Image", image); imshow("Dilated Image", dilated_image); imshow("Eroded Image", eroded_image); waitKey(0); return 0; } ``` 注意,此示例代码假定您已将 OpenCV 库正确地配置为 Visual Studio 项目,并且已将“image.jpg”文件放置在可执行文件所在的目录中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值