码迷,mamicode.com
首页 > 编程语言 > 详细

Python+OpenCV图像处理之开闭操作

时间:2019-06-29 14:33:00      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:重要   mamicode   info   dem   open   com   面积   show   read   

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

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

作用:用来消除小物体、平滑较大物体的边界的同时并不明显改变其面积,提取水平或竖直的线

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

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

作用:用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积

python实现

import cv2


def open_demo(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, (5, 5))
    binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
    cv2.imshow("open result", binary)


def close_demo(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, (5, 5))
    binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
    cv2.imshow("close result", binary)


if __name__ == "__main__":
    img = cv2.imread("image/open.jpg")
    cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
    cv2.imshow("input image", img)
    open_demo(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

开操作结果,尽量保留其他结构元素不变,消除小物体

技术图片

 

技术图片

当我们改变内核的大小,就能达到不同的效果,比如我们设置ksize=(15,1),就可以提取图像中的水平直线

 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 1))
 binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)

同理,我们让ksize=(1,15),就可以提取图像中的垂直直线。结果如下

技术图片技术图片

闭操作结果,填充封闭区域,其他保持不变

技术图片

当我们改变内核的形状,也能达到不同的效果,比如提取图像中的圆

 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
 binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)

结果如下

技术图片

技术图片

src参数:输入图像

op参数:操作类型

  MORTH_OPEN                函数做开运算

  MORTH_CLOSE              函数做闭运算

  MORTH_GRADIENT       函数做形态学梯度运算

  MORTH_TOPHAT            函数做顶帽运算

  MORTH_BLACKHAT       函数做黑帽运算

  MORTH_DILATE              函数做膨胀运算

  MORTH_ERODE             函数做腐蚀运算

kernel参数 :内核类型,用getStructuringElement函数得到

Python+OpenCV图像处理之开闭操作

标签:重要   mamicode   info   dem   open   com   面积   show   read   

原文地址:https://www.cnblogs.com/qianxia/p/11106090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!