我是靠谱客的博主 苹果大白,最近开发中收集的这篇文章主要介绍【OpenCV3.3+Python3.6】形态学操作之开闭操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

形态学操作之开闭操作

 

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

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()

原图:

 

开操作:

 

闭操作:

 

 

 

最后

以上就是苹果大白为你收集整理的【OpenCV3.3+Python3.6】形态学操作之开闭操作的全部内容,希望文章能够帮你解决【OpenCV3.3+Python3.6】形态学操作之开闭操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部