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()
相关推荐
何以解忧唯有撸码2 小时前
OpenCvSharp基于颜色反差规避FBA面单贴标
opencv
CoovallyAIHub12 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
CoovallyAIHub12 小时前
开源的消逝与新生:从 TensorFlow 的落幕到开源生态的蜕变
pytorch·深度学习·llm
CoovallyAIHub18 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
惯导马工2 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
xiaohouzi1122333 天前
OpenCV的cv2.VideoCapture如何加GStreamer后端
人工智能·opencv·计算机视觉
隐语SecretFlow3 天前
国人自研开源隐私计算框架SecretFlow,深度拆解框架及使用【开发者必看】
深度学习
荼蘼3 天前
答题卡识别改分项目
人工智能·opencv·计算机视觉
Billy_Zuo3 天前
人工智能深度学习——卷积神经网络(CNN)
人工智能·深度学习·cnn