opencv之形态学操作开闭运算(morphologyEx函数)

开运算基本原理

图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。

开运算实际是先腐蚀运算,再膨胀运算,把看上去把细微连在一起的两块目标分开了。

一般来说,开运算可以使图像的轮廓变得光滑,还能使狭窄的连接断开和消除细毛刺。开运算在过滤噪声的同时并没有对物体的形状、轮廓造成明显的影响,这是一大优势。当只关心物体的位置或者个数时,物体形状的改变不会给任务带来困扰,此时用开运算处理具有处理速度上的优势。

闭运算基本原理

闭运算是开运算的相反操作,先膨胀运算,再腐蚀运算,处理后的图片看上去将两个细微连接的图块连接在一起。

闭运算同样可以使得图像变得光滑,并且能够填平图像中的凹陷(即小孔),弥合小裂缝,而图像中目标的位置和形状可以保持不变。因此在图像去噪中,闭运算也是常用操作。

开运算、闭运算在 OpenCV 中可以使用形态学滤波函数morphologyEx()来进行。函数原型为:

cv2.morphologyEx(src, op, kernel)

src:输入图像,即源图像,填Mat类的对象即可;
op: 表示形态学运算的类型,可以是如下之一的标识符:
    MORPH_OPEN :开运算(Opening operation);
    MORPH_CLOSE :闭运算(Closing operation);
    MORPH_GRADIENT :形态学梯度(Morphological gradient);
    MORPH_TOPHAT :“顶帽”(“Top hat”);
    MORPH_BLACKHAT :“黑帽”(“Black hat”);
    MORPH_ERODE :“腐蚀”;
    MORPH_DILATE :“膨胀”。
kernel:形态学运算的内核。若为NULL时,表示的是默认使用参
考点位于中心3 x 3的核。一般使用函数getStructuringEleme
nt()配合这个参数的使用。getStructuringElement()函数会返
回指定形状和尺寸的结构元素(内核矩阵)。
    # 1. 图像二值化处理
    img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    ret,img=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    # 2. 定义十字形结构元素
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
    # 3. 对二值图进行开运算和闭运算操作
    open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
    close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wp猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值