c++ opencv求mat的最小值_opencv腐蚀和膨胀

aa28373235343225941b3ef13c2f0c25.png

本文目的

目的:学习使用opencv的腐蚀和膨胀。不介绍算法,只以使用者的角度来理解
语言:java
版本:opencv-410

分解介绍

膨胀与腐蚀,关于算法方面的介绍不太懂,太复杂,只想从使用者的角度来理解下。

  • 膨胀的作用:将白色区域变大,可以使相互分离的物体连接起来
  • 腐蚀的作用:将黑色区域变大,可以断开两个连接在一起的物体

所以
使用膨胀时,图像会变的越来越亮,白色区域越来越多
使用腐蚀时,图像会变得越来越暗,黑色区域越来越多。
如官方文档的案例中:
原图:

62603db7e43e02acb050b65cb3b868e2.png

膨胀后图片:可以看到白色区域变大了

fd190e9a575538d48171f0282963b4d4.png

腐蚀后图片:可以看到白色区域变小了

8b4b28ddbfd312ec4d3bae11ecac421d.png

膨胀函数

javadoc:
dilate(Mat src, Mat dst, Mat kernel)_dilate(Mat src, Mat dst, Mat kernel, Point anchor)

腐蚀函数

__javadoc:_
erode(Mat src, Mat dst, Mat kernel)
erode(Mat src, Mat dst, Mat kernel, Point anchor)

内核元素的构造

无论腐蚀还是膨胀都要先构造一个内核元素,也是一个Mat元素
对于自定义一个结构元素kernel,OpenCV提供了一个函数getStructuringElement,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形。
getStructuringElement的内部并没有什么优化实现,只是封装了一下功能。其原理同样是声明一个Mat,然后求形状,指定Mat的值。
总之:getStructuringElement是一种更加简便的方法实现一个kernel。

元素类型

结构性元素类型有三种:矩形,椭圆和十字
Imgproc.CV_SHAPE_RECT;
Imgproc.CV_SHAPE_CROSS;
Imgproc.CV_SHAPE_ELLIPSE;

三种类型元素,腐蚀时效果不一样,在下面的程序运行时拖动slider,可以看到。

代码

package 

效果

原图:

abec0b791c55a846884905ba619ebecc.png

腐蚀效果:黑色区域变大,图片黑化

d0a4958bd4845043df423ea81edf06a4.png

膨胀效果:白色区域变大

316e261a07eb90f7a0167b673377a705.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值