opencv学习笔记(17)开闭操作

示例用图:在这里插入图片描述
在这里插入图片描述

开操作(open)

简介

1.图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的。
2.主要是应用在二值图像分析中,灰度图像亦可。
3.开操作=腐蚀+膨胀,输入图像+结构元素。

作用

1.消除图像中小的干扰区域,消除3×3、5×5或更大的噪点。
2.水平或者垂直线提取。

闭操作(close)

简介

1.图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的。
2.主要是应用在二值图像分析中,灰度图像亦可。
3.开操作=膨胀+腐蚀,输入图像+结构元素。

作用

1.填充小的封闭区域。
2.水平或者垂直线提取。

代码API使用及效果

代码API

#coding=UTF-8
import cv2 as cv
import numpy as np
def open_demo(image):
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow("open-result",binary)

def close_demo(image):
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
    binary = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
    cv.imshow("close_result",binary)

scr = cv.imread("D:/academic/picture/opencv_data/123.png")
cv.imshow("input image",scr)
#open_demo(scr)
#close_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

效果

开操作效果

在这里插入图片描述
可以看到,红圈内的许多小白点没有了,变成了黑色。

闭操作效果

在这里插入图片描述
可以看到,这次是红圈内的小黑点没有了,被填充成了白色。

应用1(去除横竖直线)

#coding=UTF-8
import cv2 as cv
import numpy as np
def open_demo(image):
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,5))
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow("open-result",binary)
 
 scr = cv.imread("D:/academic/picture/opencv_data/line.png")
cv.imshow("input image",scr)
open_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

代码部分并没有很大改变,无疑就是把kernel的size变成了(1,5),看看效果:在这里插入图片描述
可以看到,横线没了。
如果kernel的size取(5,1),就会是竖线消失,横线保留,如图:
在这里插入图片描述

应用2(去除非圆噪点)

#coding=UTF-8
import cv2 as cv
import numpy as np
def open_demo(image):
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
    binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow("open-result",binary)

scr = cv.imread("D:/academic/picture/opencv_data/stuff.jpg")
cv.imshow("input image",scr)
open_demo(scr)
cv.waitKey(0)
cv.destroyAllWindows()

当改变内核形状时,还能达到提取圆的效果:
(自己确实找不到图了,在别人的博客偷了一张来,侵删)
在这里插入图片描述
图片来自:OpenCV学习笔记-开闭操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值