首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Opencv-Python形态学处理

形态学处理在消除小物体,排除黑洞,白洞时很好用

最基本的形态学操作是:膨胀(dilation)和腐蚀(erosion)。

腐蚀可以简单理解为黑色区域变大,膨胀可以理解为白色区域变大。

效果如图所示:

实现代码:

# -*- coding: utf-8 -*-

"""

Created on Wed Aug 28 16:39:08 2019

运行环境python==3.6 opencv-contrib-python== 4.1 win10系统

第一行“# -*- coding: utf-8 -*-”告诉Python解释器,按照UTF-8编码读取源代码

"""

#图像获取

import cv2

import numpy as np

import copy

#

dir1='lena.jpg' #读取要处理的图片

image=cv2.imread(dir1)

#cv2.imshow("image", image)

#

imgray =cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #彩色转灰度

#cv2.imshow("imgray", imgray)

#

thresh=120

ret,binary =cv2.threshold(imgray,thresh,255,cv2.THRESH_BINARY) #输入灰度图,输出二值图

cv2.imshow('binary',binary)

#

binary2 =copy.deepcopy(binary) #二值图拷贝一份

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

eroded = cv2.erode(binary2,kernel) #腐蚀图像

cv2.imshow("ErodedImage",eroded); #显示腐蚀后的图像

#

dilated = cv2.dilate(binary2,kernel) #膨胀图像

cv2.imshow("dilated",dilated) #显示膨胀后的图像

#

binary = cv2.morphologyEx(binary2,cv2.MORPH_OPEN, kernel) #开运算

cv2.imshow("open-result", binary)

#

binary = cv2.morphologyEx(binary2,cv2.MORPH_CLOSE, kernel) #闭运算

cv2.imshow("close-result",binary)

#

top_dst = cv2.morphologyEx(binary2,cv2.MORPH_TOPHAT, kernel) #顶帽

cv2.imshow("top_dst", top_dst)

#

black_dst = cv2.morphologyEx(binary2,cv2.MORPH_BLACKHAT, kernel) #黑帽

cv2.imshow("black_dst",black_dst)

#

basic_dst = cv2.morphologyEx(binary2,cv2.MORPH_GRADIENT, kernel) #形态学梯度

cv2.imshow("basic_dst",basic_dst)

#

cv2.waitKey(0)

cv2.destroyAllWindows()

开运算,其实就是先腐蚀后膨胀的操作。作用:去除噪声,消除小物体在纤细点处分离物平滑较大物体的边界的同时并不明显改变其面积。

闭运算:操作为先膨胀后腐蚀,作用:排除小型空洞(指黑色区域)平滑物体轮廓弥合(连接)窄的间断点,沟壑填补轮廓线断裂。

顶帽:原图像与开运算之间的差值图像

黑帽:闭运算与原图像的差值图像

形态学梯度:用膨胀后的图像减去腐蚀后的图像,得到的差值图像称为梯度图像

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190917A03ONC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券