形态学笔记:侵蚀+膨胀+开运算+闭运算+形态学梯度+顶帽运算+黑帽运算

形态学

一般在二值图上操作

输入:原图、操作结构内核

简单阈值

对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值

原图-->灰度图-->二值图

python 复制代码
logo = cv2.imread('./fans.jpg')
# 参数1 被转换的图像
# 参数2 原图转为灰度图
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
# 转为二值图
# 参数1 灰度图
# 参数2 阈值 小于阈值为0
# 参数3 大于阈值为maxval
# 参数4 类型    cv2.THRESH_BINARY   cv2.THRESH_OTSU 会自适应阈值
# retval, logo_binary = cv2.threshold(logo_gray, 100, 255, cv2.THRESH_BINARY)
retval, logo_binary = cv2.threshold(logo_gray, 100, 255, cv2.THRESH_OTSU)

侵蚀

内核在原图上滑动,内核框住的元素全为1才为1(保留1),否则为0(侵蚀)

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_black.png')

# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 核
# 参数3 侵蚀次数
erode_img = cv2.erode(img, kernel, iterations=1)
cv2.imshow('1', img)
cv2.imshow('2', erode_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

侵蚀后

膨胀

内核在原图上滑动,内核框住的元素只要有1为1(膨胀),否则为0(保留0)

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_black.png')
# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 核
# 参数3 膨胀次数
dilate_img = cv2.dilate(img, kernel, iterations=1)
cv2.imshow('1', img)
cv2.imshow('2', dilate_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

膨胀后

开运算

侵蚀+膨胀

先侵蚀后膨胀,用于消除噪声

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_open.png')
# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 形态操作的类型
# 参数3 核
# 参数3 侵蚀次数
open_img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=1)
# erode_img = cv2.erode(img, kernel, iterations=1)
# open_img = cv2.dilate(erode_img, kernel, iterations=1)

cv2.imshow('1', img)
cv2.imshow('2', open_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

开运算后

闭运算

膨胀+侵蚀

先膨胀后侵蚀,用于消除图像中小的暗点

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_close.png')
# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 形态操作的类型
# 参数3 核
# 参数3 侵蚀次数
close_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=1)
# dilate_img = cv2.dilate(img, kernel, iterations=1)
# close_img = cv2.erode(dilate_img, kernel, iterations=1)

cv2.imshow('1', img)
cv2.imshow('2', close_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

闭运算后

形态学梯度

原图 - 侵蚀 = 轮廓线

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_black.png')
# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 形态操作的类型
# 参数3 核
# 参数3 侵蚀次数
gradient_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, iterations=1)

cv2.imshow('1', img)
cv2.imshow('2', gradient_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

梯度后

顶帽运算

原图 - 开运算(侵蚀+膨胀) = 外部噪点

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_open.png')
# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 形态操作的类型
# 参数3 核
# 参数3 侵蚀次数
tophat_img = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, iterations=1)

cv2.imshow('1', img)
cv2.imshow('2', tophat_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

顶帽后

黑帽运算

原图 - 闭运算(膨胀+侵蚀) = 内部噪点

python 复制代码
import cv2
import numpy as np

img = cv2.imread('./imgs/py_close.png')
# kernel = np.ones((5, 5))
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 参数1 原图
# 参数2 形态操作的类型
# 参数3 核
# 参数3 侵蚀次数
blackhat_img = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel, iterations=1)

cv2.imshow('1', img)
cv2.imshow('2', blackhat_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

黑帽后

相关推荐
小oo呆2 分钟前
【自然语言处理与大模型】Windows安装RAGFlow并接入本地Ollama模型
人工智能·自然语言处理
开放知识图谱5 分钟前
论文浅尝 | HOLMES:面向大语言模型多跳问答的超关系知识图谱方法(ACL2024)
人工智能·语言模型·自然语言处理·知识图谱
weixin_444579306 分钟前
基于Llama3的开发应用(二):大语言模型的工业部署
人工智能·语言模型·自然语言处理
一点.点10 分钟前
自然语言处理的简单介绍
人工智能·深度学习·自然语言处理
逼子格20 分钟前
硬件工程师笔记——二极管Multisim电路仿真实验汇总
笔记·嵌入式硬件·硬件工程师·multisim·硬件工程师学习·电子器件·电路图
CodeJourney.36 分钟前
基于MATLAB的生物量数据拟合模型研究
人工智能·爬虫·算法·matlab·信息可视化
中电金信40 分钟前
中电金信参编的国家标准《信息技术 中间件 消息中间件技术要求》正式发布
人工智能
龙湾开发42 分钟前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
c++·笔记·学习·图形渲染·贴图
胡耀超1 小时前
18.自动化生成知识图谱的多维度质量评估方法论
人工智能·python·自动化·知识图谱·数据科学·逻辑学·质量评估
whoarethenext1 小时前
c/c++的opencv的轮廓匹配初识
c语言·c++·opencv