opencv教程(基于python)----图象形态学转换

形态学造作是根据图象形状进行的简单操作。一般情况下对二值化图象进行的操作,需要输入两个参数,一个是原始图像,第二个是被称为结构化元素或和,它是用来决定操作性质的两个基本操作是腐蚀和膨胀。

腐蚀

腐蚀会把物体的边界腐蚀掉,卷积核沿着图象滑动,如果卷积核对应的原图的所有像素值为1,那么中心元素就保持原来的值,否则变为零。主要应用在去除白噪声,也可以断开连在一起的物体。主要的函数是cv2.erode()

cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

这是erode函数的完整定义,src是输入图象;kenel是卷积的内核,默认的是一个3X3的矩阵,可以自定义;iteration是腐蚀的次数默认的是1,当然也可以自定义,否则效果不显著。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('C:/Users/dell/Desktop/u.jpg',0)
kenel=np.ones((5,5),np.uint8)
erosion=cv2.erode(img,kenel,iterations=3)
plt.subplot(1,2,1),plt.imshow(img)
plt.title('original'),plt.xticks([]),plt.yticks([])
plt.subplot(1,2,2),plt.imshow(erosion)
plt.title('eroded'),plt.xticks([]),plt.yticks([])
plt.show()

这里我腐蚀了3次,一次的话效果根本不显著。
这里写图片描述

膨胀

与腐蚀想法,卷积核所对应的原图像的像素值只要有一个是1,中心像素值就是1。一般在除噪是,先腐蚀在膨胀,因为腐蚀在去除白噪声的时候也会使图像缩小,所以我们之后要进行膨胀。当然也可以用来谅解两个分开的物体。所用到的函数是cv2.dilate()

dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

参数的用法也和前面的一样,我就不赘述了。

dilation=cv2.dilate(img,kenel,iterations=3)

程序也是相应的参数换一下。
这里写图片描述

高级运算

先腐蚀再膨胀的叫做开运算,就像之前说的用来除噪
主要函数是cv2.morphologyEx()

morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

主要的参数是scr是输入图片;op是选择相对饮的高级操作;kenel是核的大小;iteration可选。

open=cv2.morphologyEx(img,cv2.MORPH_OPEN,kenel)

程序换相应行的命令就好。图象效果一般,因为没找到有噪声的图片。
这里写图片描述

闭运算是先膨胀在腐蚀,经常用来填充前景物体中的消毒或者小黑点

close=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kenel,iterations=3)

这个的效果还好一点。
这里写图片描述

形态学梯度就是一幅图像膨胀与腐蚀的差别,输出结果就像图象的轮廓。

gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kenel,iterations=3)

相应的位置换参数就好
这里写图片描述

礼貌是原始图像与进行开运算得到的图像结果之差

tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kenel,iterations=3)

相应的位置换换参数。
这里写图片描述

黑帽是闭运算的到的图象与原始图像的差

blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kenel,iterations=5)

原始相应的位置换换参数就好。
这里写图片描述

小结

这一节的基本操作是腐蚀,膨胀,大部分参数都是固定的那些。但是关于卷积核,除了一般的正方形,opencv还有cv2.getStructuringElement函数来构造圆形和椭圆的。

cv2.getStructuringElement(shape, ksize, anchor=None)

shape是形状主要有cv2.MORPH_RECT(矩形),cv2.MORPH_ELLIPSE(椭圆),cv2.MORPH_CROSS(交叉);ksize是矩阵的尺寸。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值