OpenCV--形态学

形态学

形态学

从图像中提取对表达和描绘区域形状有意义的图像分量

图像全局二值化

python 复制代码
import cv2
import numpy as np
"""
图像全局二值化--0与255
二值化的主要目的是通过简化图像信息、增强对比度、分割目标物体、提取特征信息、去除噪声以及压缩存储和快速处理等方式,使图像更容易被计算机处理和分析
最好是灰度图
"""
img = cv2.imread('./img/cat.jpeg')
# 二值操作对灰度图像操作,先把图像变为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化 127:阈值, 255最大值, cv2.THRESH_BINARY操作类型
# 返回两个值,一个是阈值,一个是二值化处理后的图片
thresh, dst = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

cv2.imshow('cat', np.hstack((gray, dst)))

自适应阈值

python 复制代码
"""
自适应阈值二值化,全局二值化在全图中只能采用一个阈值,不同的部分具有不同的亮度,阈值应该不同
"""
# 255最大值, cv2.ADAPTIVE_THRESH_GAUSSIAN_C计算阈值的方法,有两个选择,这个是最好的, cv2.THRESH_BINARY操作类型
# 3为计算阈值的区域大小 0为一个常数,阈值等于平均值或者加权平均值减去这个常数
dst1 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 0)

腐蚀操作

python 复制代码
"""
腐蚀操作--通过消除图像中的边界点来使图像沿着边界向内收缩。这种操作可以用于消除图像中的小型噪点、细小物体,或者断开相连的物体。

选择一个结构元素(也称为腐蚀核):结构元素是一个小的二维数组,用于定义腐蚀操作的运算方式。其大小和形状决定了腐蚀的强度和效果。
逐像素比较:将结构元素放置在图像的某个像素位置上,然后对于结构元素和图像重叠的区域,检查结构元素内的所有像素是否都与图像内的对应像素匹配。
更新像素值:如果结构元素内的所有像素都与图像内的对应像素匹配,则该像素保持不变;否则,将该像素置为背景值(通常是0或黑色)。
遍历整个图像:重复上述步骤,直到遍历完整个图像。

简单点说就是,在全黑的背景图里面有一些白色字体,如果腐蚀核在背景图中的重叠区域全是白色,则结果为白色,但只要有一点黑色,则全为黑色
所以腐蚀核的大小很重要
"""
# 腐蚀核是全1的, iterations迭代次数,即腐蚀次数,次数越多,效果越好
kernel = np.opnes((3, 3), np.uint8)
dst2 = cv2.erode(img, kernel, iterations=2)

# 但每次腐蚀核需要自己写,很麻烦,我们可以自动获取
# 获取形态学腐蚀核 cv2.MORPH_RECT:形状, MORPH_RECT长方形, MORPH_ELLIPSE椭圆, MORPH_CROSS十字架
# (5, 5)大小
kernel1 = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))

膨胀

python 复制代码
"""
膨胀--通过将图像中的像素值进行扩展或"增肥",使得图像的边界向外扩张
和腐蚀相反
"""
dst3 = cv2.dilate(img, kernel, iterations=1)

开运算

python 复制代码
"""
开运算 = 腐蚀 + 膨胀
开运算可以去除图形外的噪点
真实使用时,注意调节核大小和迭代次数
"""
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
dst4_1 = cv2.erode(img, kernel, iterations=1)
dst4_2 = cv2.dilate(img, kernel, iterations=1)

# OpenCV提供了开运算(cv2.MORPH_OPEN)的api, 噪声比较多的情况下,kernel选择大一点
dst4_3 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=2)

闭运算

python 复制代码
"""
闭运算 = 膨胀 + 腐蚀
闭运算可以去除图形内部的噪点
这里仅展示api方法,同上
真实使用时,注意调节核大小和迭代次数
"""
dst5 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=2)

形态学梯度

python 复制代码
"""
形态学梯度 = 原图 - 腐蚀
即得到腐蚀掉的部分--边缘
真实使用时,注意调节核大小和迭代次数
"""
# cv2.MORPH_GRADIENT 形态学梯度
dst6 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, iterations=2)

顶帽操作

python 复制代码
"""
顶帽操作 = 原图 - 开运算
开运算可以去除图形外的噪点,顶帽操作得到去除的噪点
真实使用时,注意调节核大小和迭代次数
"""
# cv2.MORPH_TOPHAT 顶帽操作
dst7 = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, iterations=2)

黑帽操作

python 复制代码
"""
黑帽操作 = 原图 - 闭运算
得到图形内部的噪点
真实使用时,注意调节核大小和迭代次数
"""
dst8 = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel, iterations=2)

cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
黑白企鹅鹅几秒前
云计算与AI技术融合:AWS、代理、RPA和面部识别机器人的协同创新
人工智能·机器人·云计算·aws·rpa
取名真难.10 分钟前
人脸检测(Python)
python·opencv·计算机视觉
小魔王降临16 分钟前
图像练习-识别中圆形锡点 (04)
人工智能·计算机视觉
光电的一只菜鸡36 分钟前
相机光学(二十五)——数字相机和模拟相机
人工智能·数码相机
Czi.1 小时前
Build a Large Language Model (From Scratch)附录E(gpt-4o翻译版)
人工智能·语言模型·自然语言处理
DS小龙哥1 小时前
QT+OpenCV在Android上实现人脸实时检测与目标检测
android·人工智能·qt·opencv·目标检测
我爱学Python!1 小时前
AI时代的产品经理的成长之路:可能是小宇宙最全的产品经理指南(中)
人工智能·深度学习·神经网络·大语言模型·产品经理·ai大模型·大语言大模型
Thetoicxdude2 小时前
迎接AI時代的新篇章:GPT-5 技術突破與未來展望
人工智能
聊聊网事2 小时前
【AI资讯】可以媲美GPT-SoVITS的低显存开源文本转语音模型Fish Speech
人工智能·gpt
2的n次方_2 小时前
迎接AI新时代:GPT-5即将登场的巨大变革与应用前瞻
人工智能·gpt·学习