前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV与图像处理(三)

OpenCV与图像处理(三)

作者头像
Must
发布2020-07-28 11:41:18
6770
发布2020-07-28 11:41:18
举报
文章被收录于专栏:机器视觉工坊机器视觉工坊

本章节的主要内容是图像形态学,包括以下7个知识点:

1、膨胀

2、腐蚀

3、开操作

4、闭操作

5、形态学梯度

6、顶帽操作

7、黑帽操作

以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。


1、图像形态学基础

膨胀与腐蚀是图像形态学最基础的两个操作,形态学的其它操作都是基于这两个操作基础上得到的,图像形态学是二值图像分析的重要分支学科。

二值图像的腐蚀和膨胀就是将一个结构元素(小型二值图,一般为3*3大小)在一个大的二值图上逐点移动并进行比较,根据比较的结果作出相应处理而已。对二值图像来说,白色被腐蚀即为黑色的膨胀,白色的膨胀就是黑色被腐蚀。要注意的是,膨胀和腐蚀都是不可逆的,即两者不能完全的相互抵消。

膨胀:结构元素的白点与要处理的图形对应像素点只要有一个相同,则该点设为白色,否则仍然为黑色。膨胀可以看成是最大值滤波,即用最大值替换中心像素点。

腐蚀:结构元素的白点与要处理的图形对应像素点全部相同,则该点为白色,否则变为黑色(即被腐蚀掉了)。腐蚀可以看出是最小值滤波,即用最小值替换中心像素点。

开操作:先腐蚀后膨胀的过程称为开运算,具有消除细小物体,来去除噪声,在纤细处分离物体和平滑较大物体边界的作用。

闭操作:先膨胀后腐蚀的过程称为闭运算,具有填充前景物体内细小空洞或者前景物体上的小黑点,连接邻近物体和平滑边界的作用。

形态学梯度:膨胀操作与腐蚀操作的差值,形态学梯度还包括内部梯度和方向梯度,作用:提取前景物体的轮廓。

顶帽操作:原图像与开操作的差值,作用:提取图像中的噪声。

黑帽操作:闭操作与原图像的差值,作用:突出噪声与原始图像的交界处,可近似表现出一些轮廓。

2、图像形态学代码实战

代码语言:javascript
复制
# -*- coding: utf-8 -*-

import cv2
import numpy as np

img_path = "test1.jpg"
img=cv2.imread(img_path)
cv2.imshow('origin', img)

# 阈值二值化分割
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
ret, threshold_binary = cv2.threshold(gray, 155, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

# 膨胀
#用numpy生成卷积核
kernel1 = np.ones((3,3),np.uint8)
dilate_img = cv2.dilate(threshold_binary, kernel1, iterations = 1)
cv2.imshow('dilate', dilate_img)

# 腐蚀
#用numpy生成卷积核
erode_img = cv2.erode(threshold_binary, kernel1, iterations = 1)
cv2.imshow('erode', erode_img)

# 开运算:先腐蚀后膨胀
# 具有消除细小物体,来去除噪声,在纤细处分离物体和平滑较大物体边界的作用
kernel2 = np.ones((5,5),np.uint8) 
opening = cv2.morphologyEx(threshold_binary, cv2.MORPH_OPEN, kernel2)
cv2.imshow('opening',opening)

# 闭运算:先膨胀后腐蚀
# 具有填充前景物体内细小空洞或者前景物体上的小黑点,连接邻近物体和平滑边界的作用
closing = cv2.morphologyEx(threshold_binary, cv2.MORPH_CLOSE, kernel2)
cv2.imshow('closing',closing)

# 形态学梯度
# 膨胀操作与腐蚀操作的差值,形态学梯度还包括内部梯度和方向梯度,作用:提取前景物体的轮廓
kernel3 = np.ones((7,7),np.uint8) 
gradient = cv2.morphologyEx(threshold_binary, cv2.MORPH_GRADIENT, kernel3)
cv2.imshow('gradient',gradient)

# 顶帽操作
# 原图像与开操作的差值,作用:提取图像中的噪声
tophat = cv2.morphologyEx(threshold_binary, cv2.MORPH_TOPHAT, kernel3)
cv2.imshow('tophat',tophat)

# 黑帽操作
# 闭操作与原图像的差值,作用:突出噪声与原始图像的交界处,可近似表现出一些轮廓
blackhat  = cv2.morphologyEx(threshold_binary, cv2.MORPH_BLACKHAT, kernel3)
cv2.imshow('blackhat',blackhat)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

原图

膨胀

腐蚀

开操作

闭操作

形态学梯度

顶帽操作

黑帽操作

以上内容如有错误或者需要补充的,请留言!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉工坊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档