OpenCv之图像形态学

目录

一、形态学

二、图像全局二值化

三、自适应阈值二值化

四、腐蚀操作

五、获取形态学卷积核

六、膨胀操作

七、开运算

八、闭运算


一、形态学

定义:

  • 指一系列处理图像形状特征的图像处理技术
  • 形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或0特征,以便进一步进行图像分析和目标识别。
  • 这些处理方法基本是对二进制图像进行处理即黑白图像
  • 卷积核决定着图像处理后的效果

二、图像全局二值化

二值化:将图像的每个像素变成两种值,比如0,255

参照函数:

案例代码如下:

python 复制代码
import cv2
import numpy as  np


# 导入图片
img = cv2.imread('6.jpg')

# 二值化是对灰度图像操作
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 注意,threshold会返回两个值(一个是阈值,一个是二值化处理后的图片)
thresh,dst = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

# 展示
cv2.imshow('dog',np.hstack((gray,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

三、自适应阈值二值化

前提:

在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻值。此时的闻值是根据图像上的每一个小区域计算与其对应的闻值。因此在同一幅图像上的不同区域采用的是不同的闻值,从而使我们能在亮度不同的情况下得到更好的结果

案例代码如下:

python 复制代码
import cv2
import numpy as np

img = cv2.imread('6.jpg')


cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',1920,1080)

# 二值化操作是对灰度图像操作,把图像转为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 自适应阈值二值化只返回一个值,即二值化后的结果
dst = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,3,0)

# 展示
cv2.imshow('img',np.hstack((gray,dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

四、腐蚀操作

腐蚀操作也是用卷积核扫描图像,只不过腐蚀操作的卷积和一般都是1,如果卷积核内所有像素点都是白色,那么锚点也是白色。

腐蚀操作API:

案例代码如下:

python 复制代码
import cv2
import numpy as np

# 导入图片
img = cv2.imread('6.jpg')

# 定义核
kernel = np.ones((3,3),np.uint8)
dst = cv2.erode(img,kernel,iterations=2)

cv2.imshow('img',np.hstack((img,dst)))

cv2.waitKey(0)
cv2.destroyWindow()

五、获取形态学卷积核

OpenCv提供了获取卷积核的API,不需要我们手工创建卷积核

案例代码如下:

python 复制代码
import cv2
import numpy as np


img = cv2.imread('6.jpg')

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# 腐蚀
dst = cv2.erode(img,kernel,iterations=2)

六、膨胀操作

膨胀是腐蚀的相反操作,基本原理是只要保证卷积核的锚点是非0值,周边无论是0还是非0值,都变成非0 值

案例代码如下:

python 复制代码
import cv2
import numpy as np

# 导入图片
img = cv2.imread('6.jpg')

# 动态获取卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# 膨胀操作
dst = cv2.dilate(img,kernel,iterations=1)

# 展示图片
cv2.imshow('img',np.hstack((img,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

七、开运算

开运算=腐蚀+膨胀

案例代码如下:

python 复制代码
import cv2
import numpy as np

# 开运算=腐蚀+膨胀
# 开运算提供了另一种去除噪声的思路
img = cv2.imread('6.jpg')

kernel = cv2.cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# # 先腐蚀
# dst = cv2.erode(img,kernel,iterations=2)
#
# # 膨胀
# dst = cv2.dilate(dst,kernel,iterations=2)

# 直接调用OpenCv提供的开运算API
dst = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=2)

# 展示图片
cv2.imshow('img',np.hstack((img,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

八、闭运算

闭运算=膨胀+腐蚀

案例代码如下:

python 复制代码
import cv2
import numpy as np

# 导入图片
img = cv2.imread('6.jpg')

# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

# 闭运算
dst = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel,iterations=2)

# 展示图片
cv2.imshow('img',np.hstack((img,dst)))

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
祭曦念14 小时前
古诗小集开发实战:从零开发一款 HarmonyOS 古诗鉴赏应用
pytorch·深度学习·harmonyos
YOLO数据集集合16 小时前
无人机航拍街道巡检数据集 | 空中视角车辆检测、交通流量统计、违停识别、智能交通YOLO数据集10399期
深度学习·yolo·目标检测·无人机
放下华子我只抽RuiKe516 小时前
FastAPI 全栈后端(四):认证与授权
开发语言·前端·javascript·python·深度学习·react.js·fastapi
菜鸟‍17 小时前
【论文学习】Segment Anything 分割一切
深度学习·学习·计算机视觉
装不满的克莱因瓶17 小时前
自然语言处理发展历史——从规则系统到大语言模型的演进之路
网络·人工智能·python·深度学习·语言模型·自然语言处理
weixin_4082663419 小时前
H20训练CPGNET环境搭建
深度学习
装不满的克莱因瓶19 小时前
RLHF中的PPO算法——大语言模型对齐优化的核心引擎
人工智能·python·深度学习·算法·机器学习·语言模型·自然语言处理
菩提树下的凡夫20 小时前
新版OpenCV5.0在ONNX模型的推理应用
opencv·算法
AndrewHZ20 小时前
【LLM技术全景】开源大模型生态:如何选择适合你的基座模型?
人工智能·深度学习·语言模型·开源·llm·transformer·基座模型
机器学习之心21 小时前
小龙虾优化算法(COA)驱动的CNN-LSTM多输出回归模型及其SHAP可解释性分析
算法·cnn·lstm·小龙虾优化算法·cnn-lstm多输出回归·shap可解释性分析