【OpenCV3.3+Python3.6】形态学操作之开闭操作

31 篇文章 1 订阅
31 篇文章 0 订阅

形态学操作之开闭操作

 

形态学开闭操作其实与之前的膨胀与腐蚀有一定的关系

1.开操作

图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的,主要应用在二值图像分析中,灰度图像即可

开操作=腐蚀+膨胀,输入图像+结构元素

开操作可以消除图像中的干扰区域,不会破坏结构

2.闭操作

图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的 主要应用在二值图像分析中,灰度图像即可

开操作=腐蚀+膨胀,输入图像+结构元素

闭操作可以填充小的封闭区域

 

opencv中利用cv2.morphologyEx(src, op, kernel) 函数来进行各类形态学的变化

函数原型:cv2.morphologyEx(src, op, kernel)

参数说明:

(1)src:传入的图片

(2)op进行变化的方式

            cv2.MORPH_OPEN 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作

            cv2.MORPH_CLOSE 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作

(3)kernel表示方框的大小

             kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(15,1)) #只保留横向的  

             kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 15)) #只保留竖向的  

             kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) #消除杂乱的线 

             kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10, 10)) #只保留原点,不同的结构元素 

 

函数原型:cv2.getStructuringElement(ma,kernel_size)    返回指定形状和尺寸的结构元素。

参数说明:

1.ma:表示内核的形状

         MORPH_RECT:矩形

         MORPH_CROSS:交叉形

         MORPH_ELLIPSE:椭圆形

2.kernel_size:内核的尺寸

 

代码奉上:

import cv2
import numpy as np

def open_deal(image):
    print(image.shape)
    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)  #灰度图转换
    ret, binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)  #二值化处理
    cv2.imshow("binary",binary)
    #kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(15,1))    #只保留横向的   open&close1.png
    #kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 15))   #只保留竖向的  open&close1.png
    #kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))    #消除杂乱的线   open&close2.png
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10, 10))   #只保留原点,不同的结构元素    open&close3.png
    dst=cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)   #开操作
    cv2.imshow("open_deal", dst)

def close_deal(image):
    print(image.shape)
    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)   #灰度图转换
    ret, binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)      #二值化处理
    cv2.imshow("binary",binary)
    kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(15,15))  #定义方框大小
    dst=cv2.morphologyEx(binary, cv2.MORPH_CLOSE,kernel)    #闭操作
    cv2.imshow("close_deal", dst)

print("-----------hello------------")
src=cv2.imread("open&close3.png")
cv2.imshow("source_image",src)
open_deal(src)
close_deal(src)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图:

 

开操作:

 

闭操作:

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Demo.demo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值