资讯专栏INFORMATION COLUMN

opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽

Lin_R / 932人阅读

摘要:图像腐蚀腐蚀的基本思想侵蚀前景物体的边界总是试图保持前景为白色内核在图像中滑动如在卷积中只有当内核下的所有像素都是时,原始图像中的像素或才会被认为是,否则它会被侵蚀变为零边界附近的所有像素都将被丢弃,具体取决于内核的大小因此,前景对象的厚度

Morphological Transformations

1图像腐蚀

腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色);内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时,原始图像中的像素(1或0)才会被认为是1,否则它会被侵蚀(变为零).

边界附近的所有像素都将被丢弃,具体取决于内核的大小.因此,前景对象的厚度或大小减小,或者图像中的白色区域减小.
它有助于消除小的白噪声,分离两个连接的对象
原图:

代码

import cv2
import numpy as np

img = cv2.imread("img7.png",0)

kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

cv2.imshow("src",img)
cv2.imshow("show",erosion)
cv2.waitKey()

效果图:

2膨胀

它恰好与侵蚀相反。 这里,如果内核下的至少一个像素为“1”,则像素元素为“1”. 因此它增加了图像中的白色区域或前景对象的大小增加.
通常,在去除噪音的情况下,腐蚀之后是膨胀.因为,侵蚀会消除白噪声,但它也会缩小我们的物体,所以我们膨胀它,由于噪音消失了,它们不会再回来,则我们的物体区域会增加。 它也可用于连接对象的破碎部分.

代码

import cv2
import numpy as np

img = cv2.imread("img7.png",0)

kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(img,kernel,iterations = 1)

cv2.imshow("src",img)
cv2.imshow("show",dilation)
cv2.waitKey()

3开运算

cv2.morphologyEx() :先腐蚀再膨胀,有助于消除噪音.
代码

import cv2
import numpy as np
import matplotlib.pylab  as plt

img = cv2.imread("img8.png",0)

kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow("src",img)
cv2.imshow("show",opening)
cv2.waitKey()

4闭运算

先膨胀后腐蚀,用于消除前景对象内的小孔或对象上的小黑点.
代码

import cv2
import numpy as np

img = cv2.imread("img9.png",0)

kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow("src",img)
cv2.imshow("show",closing)
cv2.waitKey()


5形态学梯度

图像的膨胀和腐蚀之间的差异,结果看起来像目标的轮廓
代码

import cv2
import numpy as np

img = cv2.imread("img7.png",0)

kernel = np.ones((5,5),np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)


cv2.imshow("src",img)
cv2.imshow("show",gradient)
cv2.waitKey()

6顶帽(Top Hat)

原图像与开运算图的区别,突出原图像中比周围亮的区域
代码

import cv2
import numpy as np

img = cv2.imread("img7.png",0)

kernel = np.ones((5,5),np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)


cv2.imshow("src",img)
cv2.imshow("show",tophat)
cv2.waitKey()

7黑帽(Black Hat)

闭运算图 - 原图像,突出原图像中比周围暗的区域
代码

import cv2
import numpy as np

img = cv2.imread("img7.png",0)

kernel = np.ones((5,5),np.uint8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

cv2.imshow("src",img)
cv2.imshow("show",blackhat)
cv2.waitKey()

结构元素

我们在Numpy的帮助下创建了前面示例中的矩形结构元素. 但在某些情况下,可能需要椭圆/圆形内核。 所以为此,OpenCV有一个函数cv2.getStructuringElement(). 只需传递内核的形状和大小,即可获得所需的内核.
代码

# Rectangular Kernel
cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

Out[4]: 
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]], dtype=uint8)
       
# Elliptical Kernel
cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
Out[5]: 
array([[0, 0, 1, 0, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [0, 0, 1, 0, 0]], dtype=uint8)
       
# Cross-shaped Kernel
cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
Out[6]: 
array([[0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0],
       [1, 1, 1, 1, 1],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0]], dtype=uint8)      
    

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42010.html

相关文章

  • OpenCV(项目)车牌识别1 -- 车牌提取

    摘要:横纵方向腐蚀膨胀膨胀腐蚀去噪得到车牌区域中远距离车牌识别近距离车牌识别腐蚀膨胀去噪膨胀腐蚀连接二次缝合纵方向腐蚀膨胀分割上下距离比较近的物体。 目录 一、形态学车牌提取(简单:单情景)  1、读取图片,转灰度图  2、提取轮廓ÿ...

    番茄西红柿 评论0 收藏2637
  • OpenCV-Python计算机视觉函数

    摘要:如果不设置这个,图片只会一瞬间显示,就消失了。括号里面也可以设置显示时长。 目录 1、概述 2、OpenCV基础 读取图片 imread 调整显示窗口大小 resizeWindow 调整图像尺寸大小 resize 色彩空间进行转换 cvtColor 绘制线段 line 绘制矩形框 recta...

    levius 评论0 收藏0
  • 女朋友嫌我拍的照片有雾,连夜用OpenCV写出❤️去雾算法❤️逃过一劫(收藏保命)

    ❤️欢迎订阅《从实战学python》专栏,用python实现爬虫、办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!❤️ 更多精品专栏简介点这里 治愈生活的良方 就是保持对生活的热爱 前言 哈喽,大家好,我是一条。 每次和女朋友出去玩,拍照是必须的,天气好还行,天气要是不好,加上我这破手机,那拍的简直惨不忍睹,自己都不过去。 但是没什么能难倒程序员的,为了不挨骂,连夜写出去雾...

    DTeam 评论0 收藏0
  • Programming Computer Vision with Python (学习笔记七)

    摘要:数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。所以这个结果也会把形状以外的噪点排除掉。你还可以查看其它笔记。参考资料图像的膨胀与腐蚀数学形态学基本操作及其应用计算机视觉特征提取与图像处理第三版 数学形态学(mathematical morphology)关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。起初是基于二值图像提出的,后来扩展到灰度图像。...

    Charles 评论0 收藏0
  • python数字图像处理之基本态学滤波

      小编写这篇文章的主要目的,主要是给大家介绍关于python数字图像处理的一些相关介绍,包括基本的形态学滤波,比如可以使用数字图像去进行处理类似的形态学滤波。那么,具体的内容呢?下面就给大家详细解答下。  引言  对图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。  1、膨胀(dilation)  原理:一般对二值图像进行操作。找到像素值为1的点,将它...

    89542767 评论0 收藏0

发表评论

0条评论

Lin_R

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<