opencv笔记(3)——图像形态学处理

图像形态学处理

(针对二值图像)

一、形态学-腐蚀操作

遍历整个图片,对一个范围(如 3 × 3)内的像素点,若出现不一致,即有黑有白,将这个范围内的白色像素点全部变为黑色像素点

import cv2          #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np  #基本数据计算工具包
%matplotlib inline  #专有魔法指令,即时显示
img = cv2.imread('dige.png')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

kernel = np.ones((3,3), np.uint8)
dige_eosion = cv2.erode(img, kernel, iterations = 1)
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

kernel = np.ones((3,3), np.uint8)
eosion_1 = cv2.erode(img, kernel, iterations = 1)
eosion_2 = cv2.erode(img, kernel, iterations = 2)
eosion_3 = cv2.erode(img, kernel, iterations = 3)
res = np.hstack((eosion_1, eosion_2, eosion_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、形态学-膨胀操作

与腐蚀相反,用白色填充区域内的黑色

kernel = np.ones((3,3), np.uint8)
dige_dilate = cv2.dilate(img, kernel, iterations = 1)
cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述
可发现,相比被腐蚀后线条变细的迪哥,膨胀后的迪哥线条又恢复了

三、开、闭运算

自动将腐蚀和膨胀操作结合

# 开运算:先腐蚀,再膨胀
img = cv2.imread('dige.png')

kernel = np.ones((5,5), np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述

# 闭运算:先膨胀,再腐蚀
img = cv2.imread('dige.png')

kernel = np.ones((5,5), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow('closing ', closing)
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述

四、梯度运算(=膨胀-腐蚀)

pie = cv2.imread('pie.png')
kernel = np.ones((7,7), np.uint8)
dilate = cv2.dilate(pie, kernel, iterations = 5)
erosion = cv2.erode(pie, kernel, iterations = 5)

res = np.hstack((dilate, erosion))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destoryAllWindows()

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('gradient ', gradient )
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述

五、礼帽、黑帽运算

# 礼帽=原始输入-开运算结果
img = cv2.imread('dige.png')
tophat= cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述

# 黑帽=闭运算-原始输入
img = cv2.imread('dige.png')
blackhat= cv2.morphologyEx(pie, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
cv2.destoryAllWindows()

在这里插入图片描述

六、常用函数

  • numpy.ones(shape, dtype=None, order=‘C’)

     函数返回给定形状和数据类型的新数组,其中元素的值设置为1。此函数与numpy zeros()函数非常相似。
     形状是一个int或一个int元组,用于定义数组的大小。 如果我们仅指定一个int变量,则将返回一维数组。 对于一个整数元组,将返回给定形状的数组。
     dtype是一个可选参数,默认值为float。 它用于指定数组的数据类型,例如int。
     该顺序定义是在内存中以行优先(C风格)还是列优先(Fortran风格)顺序存储多维数组。
    
  • cv2.erode(img, kernel, iterations)

     腐蚀操作,kernel:内核、卷积核,iterations=1:选择迭代次数,即执行几次
    
  • cv2.dilate(img1, kernel, iterations)

     膨胀操作
    
  • cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

     开运算(先腐蚀再膨胀)
    
  • cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

     闭运算(先膨胀再腐蚀)
    
  • cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

     梯度运算(膨胀-腐蚀)
    
  • cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

     顶帽运算(原始值-开运算), 突出更明亮的区域
    
  • cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

     底帽运算(闭运算-原始值)
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV是一个开源计算机视觉库,可以进行图像处理图像分析和机器视觉等方面的开发。其中,图像形态学处理OpenCV中的一种基本图像处理技术,主要用于图像形态学分析和形态学变换。 图像形态学处理主要包括以下几个基本操作: 1. 腐蚀(Erosion):将图像中的物体边界向内侵蚀,可以去除细小的噪点和连接物体之间的小桥梁。 2. 膨胀(Dilation):将图像中的物体边界向外膨胀,可以填充物体内的空洞和连接相邻物体。 3. 开运算(Opening):先对图像进行腐蚀操作,再对腐蚀后的图像进行膨胀操作,可以去除细小的物体和连接物体之间的小桥梁。 4. 闭运算(Closing):先对图像进行膨胀操作,再对膨胀后的图像进行腐蚀操作,可以填充物体内的空洞和连接相邻物体。 5. 梯度(Gradient):通过对图像进行膨胀和腐蚀操作,可以得到物体的边缘信息。 6. 礼帽(Top Hat):通过对原图像和开运算后的图像进行相减操作,可以得到原图像中小物体和较暗的区域信息。 7. 黑帽(Black Hat):通过对原图像和闭运算后的图像进行相减操作,可以得到原图像中小物体和较亮的区域信息。 这些操作可以通过OpenCV中的函数进行实现,例如: cv2.erode():进行腐蚀操作 cv2.dilate():进行膨胀操作 cv2.morphologyEx():进行开闭运算、梯度、礼帽和黑帽操作 在实际应用中,图像形态学处理常用于图像分割、形状分析、边缘检测、物体识别等方面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清园暖歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值