【形态学变换】——图像预处理(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()

输出:

相关推荐
R-G-B3 分钟前
OpenCV Python——Numpy基本操作(Numpy 矩阵操作、Numpy 矩阵的检索与赋值、Numpy 操作ROI)
python·opencv·numpy·numpy基本操作·numpy 矩阵操作·numpy 矩阵的检索与赋值·numpy 操作roi
维维180-3121-14559 分钟前
AI大模型+Meta分析:助力发表高水平SCI论文
人工智能·meta分析·医学·地学
程序员陆通12 分钟前
CloudBase AI ToolKit + VSCode Copilot:打造高效智能云端开发新体验
人工智能·vscode·copilot
程高兴15 分钟前
遗传算法求解冷链路径优化问题matlab代码
开发语言·人工智能·matlab
拾零吖19 分钟前
吴恩达 Machine Learning(Class 1)
人工智能·机器学习
数据皮皮侠44 分钟前
最新上市公司业绩说明会文本数据(2017.02-2025.08)
大数据·数据库·人工智能·笔记·物联网·小程序·区块链
智算菩萨1 小时前
【计算机视觉与深度学习实战】05计算机视觉与深度学习在蚊子检测中的应用综述与假设
人工智能·深度学习·计算机视觉
hllqkbb1 小时前
人体姿态估计-动手学计算机视觉14
人工智能·opencv·计算机视觉·分类
XiongLiding1 小时前
我的第一个MCP,以及开发过程中的经验感悟
人工智能
三花AI1 小时前
阿里 20B 参数 Qwen-Image-Edit 全能图像编辑模型
人工智能