前言: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.总结
总结:♨️♨️♨️
腐蚀:图像向内收缩,消除外部细节。
膨胀:图像向外扩张,消除内部细节。