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

输出:

相关推荐
OpenBayes贝式计算4 分钟前
教程上新丨16GB 笔记本跑出接近 26B MoE 性能,Gemma 4 12B 基于创新架构统一处理文本 / 图像 / 声音三种模态
计算机视觉·google·agent
ShyanZh12 分钟前
【skill】Humanizer-zh:24条规则消灭AI写作痕迹
人工智能·ai写作·skill
电商软件开发 小银14 分钟前
思域不再安全?AI+独立APP破局指南
人工智能·软件开发·数字化转型·商业模式·超级app·商业思维·ai 矩阵运营
asyxchenchong88820 分钟前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
武子康21 分钟前
调查研究-168 MiroFish 本地化部署分析:主仓库、Zep Cloud、离线 Fork 与真正可控的多智能体沙盘
人工智能·aigc·openai
诗词在线26 分钟前
求推荐飞花令
大数据·人工智能·python
云烟成雨TD30 分钟前
Spring AI 1.x 系列【47】 MCP Annotations 模块
java·人工智能·spring
心枢AI研习社32 分钟前
我问了claude目前最强大的模型fable 5这个问题?
人工智能·agent·claude
湘美书院--湘美谈教育1 小时前
湘美谈教育AI系列经验集锦:赋能整理聊斋志异大寓言
大数据·人工智能·深度学习·神经网络·机器学习
宜昌未来智慧谷1 小时前
WWDC 2026开发者视角解读:Siri独立App的技术架构与第三方AI模型接入机制
人工智能·架构·apple·wwdc·gemini