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
    评论
根据提供的引用内容,OpenCV是一个源计算机视觉和机器学习软件库,用于发图像和视频处理应用程序。通过使用OpenCV,您可以读取摄像头并显示实时图像,打视频文件或摄像头文件,并获取视频的相关信息,例如帧宽度、帧高度、帧率和总帧数。 对于学习OpenCV,你可以按照以下步骤进行: 1. 安装OpenCV库:在学习OpenCV之前,您需要从OpenCV官方网站下载和安装OpenCV库。根据您的操作系统和编程语言选择合适的版本。 2. 学习基本概念:熟悉OpenCV的基本概念和术语,例如图像和视频的加载、显示、保存以及常用的图像处理操作,如滤波、边缘检测和特征提取等。 3. 掌握OpenCV函数和类:深入了解OpenCV提供的函数和类,例如cv::Mat用于图像和矩阵操作,cv::VideoCapture用于读取和处理视频,以及cv::imshow和cv::waitKey等用于显示图像的函数。 4. 实践项目:通过完成一些实践项目来应用您所学到的知识。例如,利用OpenCV实现人脸检测、目标追踪、图像识别等。 5. 学习资料和资源:查找和阅读OpenCV的官方文档、教程和示例代码,参与源社区讨论和交流,加入相关的论坛和邮件列表等。 总结起来,学习OpenCV包括安装OpenCV库、学习基本概念、掌握OpenCV函数和类、实践项目以及查找和阅读相关资料和资源。通过不断实践和学习,您将能够更好地理解和应用OpenCV库来发图像和视频处理应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值