OpenCV基础知识(7)— 腐蚀与膨胀

发布于:2023-08-27 ⋅ 阅读:(120) ⋅ 点赞:(0)

前言:Hello大家好,我是小哥谈。腐蚀和膨胀是图像形态学中的两种核心操作,通过这两种操作可以清除或者强化图像中的细节。本节课就对OpenCV中的腐蚀和膨胀操作进行详细的介绍。🌈

 前期回顾:

            OpenCV基础知识(1)— OpenCV概述

            OpenCV基础知识(2)— 图像处理的基本操作

            OpenCV基础知识(3)— 图像数字化基础(像素、色彩空间)

            OpenCV基础知识(4)— 绘制图形 

            OpenCV基础知识(5)— 几何变换

            OpenCV基础知识(6)— 滤波器

            目录

🚀1.腐蚀 

🚀2.膨胀

🚀3.总结

🚀1.腐蚀 

腐蚀操作可以让图像沿着自己的边界向内收缩。OpenCV通过“”来实现收缩计算。“核”的英文名为kernel,在形态学中可以理解为“由n个像素组成的像素块”,像素块包含一个核心(核心通常在中央位置,也可以定义在其他位置)。像素块会在图像的边缘移动,在移动过程中,核会将图像边缘那些与核重合但又没有越过核心的像素点都抹除,就像削土豆皮一样,将图像一层一层地“削薄”。🌴

OpenCV将腐蚀操作封装成erode()方法,该方法的语法如下:

dst = cv2.erode(src,kernel,anchor,iterations,borderType,borderValue)

参数说明:

src:原始图像

kernel:腐蚀使用的核

anchor:可选参数,核的锚点位置。

iterations:可选参数,腐蚀操作的迭代次数,默认值为1。

borderType:可选参数,边界样式,建议默认。

borderValue:可选参数,边界值,建议默认。

返回值说明:

dst:经过腐蚀之后的图像

在OpenCV做腐蚀或者其他形态学操作时,通常使用Numpy模块来创建核数组,例如:

import numpy as np
k = np.ones((5,5),np.uint8)

这两行代码就是通过Numpy模块的ones()方法创建一个5行5列(简称5*5)、数字类型为无符号8位整数、每一个数字的值都是1的数组,这个数组就可以当做erode()方法的核参数。除了5×5的结构,还可以使用3×3、9×9、11×11等结构,行列数越大,计算出的效果就越粗糙,行列数越小,计算出的效果就越精细🍁

案例:

使用3*3的核对仙人球图像进行腐蚀操作,可以将图像里的刺抹除掉,具体代码如下:

import cv2
import numpy as np
img = cv2.imread("cactus.jpg")  # 读取原图
k = np.ones((3, 3), np.uint8)  # 创建3*3的数组作为核
cv2.imshow("img", img)  # 显示原图
dst = cv2.erode(img, k)  # 腐蚀操作
cv2.imshow("dst", dst)  # 显示腐蚀效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

运行效果如图所示:


🚀2.膨胀

膨胀操作与腐蚀操作正好相反,膨胀操作可以让图像沿着自己的边界向外扩张。图像经过膨胀操作之后,可以放大一些外部的细节。同样是通过核来计算,当核在图像的边缘移动时,核会将图像边缘填补新的像素,就像一面墙上反反复复地涂水泥,让墙变得越来越厚。🌴

OpenCV将膨胀操作封装成dilate()方法,该方法的语法如下:

dst = cv2.dilate(src,kernel,anchor,iterations,borderType,borderValue)

参数说明:

src:原始图像

kernel:膨胀使用的核

anchor:可选参数,核的锚点位置。

iterations:可选参数,腐蚀操作的迭代次数,默认值为1。

borderType:可选参数,边界样式,建议默认。

borderValue:可选参数,边界值,建议默认。

返回值说明:

dst:经过膨胀之后的图像

案例:

近视眼由于聚焦不准,看东西都是放大并且模模糊糊的,利用膨胀操作可以将正常画面处理成近视眼看到的画面。采用9×9的数组作为核来进行膨胀操作。具体代码如下:

import cv2
import numpy as np
img = cv2.imread("sunset.jpg")  # 读取原图
k = np.ones((9, 9), np.uint8)  # 创建9*9的数组作为核
cv2.imshow("img", img)  # 显示原图
dst = cv2.dilate(img, k)  # 膨胀操作
cv2.imshow("dst", dst)  # 显示膨胀效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

运行效果如图所示:


🚀3.总结

总结:♨️♨️♨️

腐蚀:图像向内收缩,消除外部细节。

膨胀:图像向外扩张,消除内部细节。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到