【形态学变换】——图像预处理(OpenCV)

目录

[1 核](#1 核)

[2 腐蚀](#2 腐蚀)

[3 膨胀](#3 膨胀)

[4 开运算](#4 开运算)

[5 闭运算](#5 闭运算)

[6 礼帽运算](#6 礼帽运算)

[7 黑帽运算](#7 黑帽运算)

[8 形态学梯度](#8 形态学梯度)


形态学变换是一种基于形状的简单变换,处理对象是二值化后的图像。有两个输入:原图像和核,一个输出:形态学变换后的图像。基本操作有以下四种。

1 核

核就是一个小区域,通常为3*3、5*5、7*7大小,比如矩形结构、椭圆结构、十字形结构,如下图所示:

2 腐蚀

核在原图(二值化后的图像)上进行从上到下,从左到右的滑动。**在滑动过程中,令核值为1的区域与该被核覆盖的对应区域进行相乘,得到最小值,就是卷积核覆盖区域中心像素点的新像素值。**简单记忆就是只要被覆盖区域有黑色(像素值为0),那么该区域的中心像素值必定为黑色。经过腐蚀之后变"瘦"了。

通过这样的遍历方式,腐蚀操作能够逐步收缩目标物体边界,消除孤立的噪声像素以及细化连续的前景区域。

总结:二值图腐蚀后白色像素(非0)变少了

案例:

python 复制代码
import cv2 as cv
import numpy as np

long = cv.imread("./images/long.png")
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# print(kernel)
# 腐蚀操作:cv2.erode(img,kernel,iterations=1)iterations:迭代次数,默认值为1
dst_erode = cv.erode(long,kernel=kernel,iterations=1)
cv.imshow("long",long)
cv.imshow("dst_erode",dst_erode)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

3 膨胀

核在滑动过程中,令核值为1的区域与被覆盖的对应区域进行相乘,得到最大值就是被覆盖区域中心像素点的新像素值。简单记忆就是,只要有白色(像素值为255),那么区域的中心像素点必为白色(255)。经过膨胀之后变"胖"了。

膨胀能逐步扩大物体的边界,连接断裂的前景部分,并填充内部空洞,使物体轮廓更加明显且连续。

总结:二值化膨胀后白色像素变多了。

案例:

python 复制代码
import cv2 as cv
import numpy as np

long = cv.imread("./images/long.png")
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# print(kernel)
# 膨胀操作:cv2.dilate(img,kernel,iterations)
dst_dilate = cv.dilate(long,kernel=kernel,iterations=2)
cv.imshow("long",long)
cv.imshow("dst_dilate",dst_dilate)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

4 开运算

先腐蚀后膨胀 ,作用:分离物体,消除小区域。特点:消除噪声,去除小的干扰块,而不影响原来的图像

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 开运算(先腐蚀,后膨胀)
opening = cv.morphologyEx(car,cv.MORPH_OPEN,kernel)
cv.imshow("car",car)
cv.imshow("opening",opening)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

5 闭运算

先膨胀后腐蚀,作用:消除/闭合物体里面的孔洞。特点:可以填充闭合区域。

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 闭运算(先膨胀,后腐蚀)
closing = cv.morphologyEx(car,cv.MORPH_CLOSE,kernel)
cv.imshow("car",car)
cv.imshow("closing",closing)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

6 礼帽运算

原图像与开运算结果图之差。作用:用来分离比邻近点亮一些的斑块。

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 礼帽运算(原图和开运算的差):cv.morphologyEx(img,cv.MORPH_TOPHAT,kernel)
tophat = cv.morphologyEx(car,cv.MORPH_TOPHAT,kernel)
cv.imshow("car",car)
cv.imshow("tophat",tophat)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

7 黑帽运算

原图与"闭运算"的结果图只差。作用:用来分离比邻近点暗一些的斑块。

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 黑帽运算(闭运算和原图之间的差):cv.morphologyEx(img,cv.MORPH_BLACKHAT,kernel)
blackhat = cv.morphologyEx(car,cv.MORPH_BLACKHAT,kernel)
cv.imshow("car",car)
cv.imshow("blackhat",blackhat)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

8 形态学梯度

形态学梯度是一个基于结构元素的图像处理方法,它通过比较原图像与膨胀图和腐蚀图之间的差异来突出图像边缘特征。 对于图像中的每个像素点,其形态学梯度值是该像素点在膨胀后的图像值与其在腐蚀后的图像值之差

作用:强化图像的边缘信息,并且对噪声有一定的抑制作用

案例:

python 复制代码
import cv2 as cv
import numpy as np
car = cv.imread("./images/car.png")
_,car =cv.threshold(car,127,255,cv.THRESH_BINARY_INV)
# 定义一个5x5的卷积核
kernel = np.ones((5,5),np.uint8)
# 形态学梯度(膨胀和腐蚀的差):cv.morphologyEx(img,cv.MORPH_GRADIENT,kernel)
gradient = cv.morphologyEx(car,cv.MORPH_GRADIENT,kernel)
cv.imshow("car",car)
cv.imshow("gradient",gradient)
cv.waitKey(0)
cv.destroyAllWindows()

输出:

相关推荐
程序员是干活的35 分钟前
Java EE前端技术编程脚本语言JavaScript
java·大数据·前端·数据库·人工智能
chaofan9801 小时前
ERNIE-4.5-0.3B 实战指南:文心一言 4.5 开源模型的轻量化部署与效能跃升
人工智能·开源·文心一言
hppyhjh1 小时前
【昇腾CANN训练营】深入cann-ops仓算子编译出包流程
人工智能
飞凌嵌入式1 小时前
飞凌嵌入式亮相第九届瑞芯微开发者大会:AIoT模型创新重做产品
人工智能·嵌入式硬件·嵌入式·飞凌嵌入式
大模型工程师1 小时前
TongYiLingMa插件下Qwen3-Coder
人工智能
大模型工程师1 小时前
独立开发:高效集成大模型,看这篇就够了
人工智能
倔强青铜三1 小时前
苦练Python第35天:数据结构挑战题,实战演练
人工智能·python·面试
说私域1 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的私域流量池用户运营研究
人工智能·小程序·开源
倔强青铜三2 小时前
苦练Python第32天:Python百宝箱,collections模块5大杀器
人工智能·python·面试