Python+OpenCV之形态学操作详解
作者:锦鲤AI幸运 时间:2021-11-24 23:37:58
一、 腐蚀与膨胀
1.1 腐蚀操作
import cv2
import numpy as np
img = cv2.imread('DataPreprocessing/img/dige.png')
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
dige.png原图1展示(注: 没有原图的可以截图下来保存本地。):
腐蚀1轮次之后~ (iterations = 1)
kernel = np.ones((3, 3), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
腐蚀结果展示图2:
腐蚀圆多次的效果,以及腐蚀原理
pie = cv2.imread('DataPreprocessing/img/pie.png')
cv2.imshow('pie', pie)
cv2.waitKey(0)
cv2.destroyAllWindows()
pie.png原图3:
腐蚀原理, 其中滤波器的大小越大腐蚀的程度越大 图4:
kernel = np.ones((30, 30), np.uint8)
erosion_1 = cv2.erode(pie, kernel, iterations=1)
erosion_2 = cv2.erode(pie, kernel, iterations=2)
erosion_3 = cv2.erode(pie, kernel, iterations=3)
res = np.hstack((erosion_1, erosion_2, erosion_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
圆腐蚀三次结果展示图5:
1.2 膨胀操作
kernel = np.ones((3, 3), np.uint8)
dige_dilate = erosion
dige_dilate = cv2.dilate(erosion, kernel, iterations=1)
cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
膨胀之前图2,发现线条变粗,跟原图对比的线条相差无几,但是没了那些长须装的噪音,图6:
膨胀圆多次的效果,以及膨胀原理与腐蚀相反,有白色点的滤波器则滤波器内数据全变为白色。
pie = cv2.imread('DataPreprocessing/img/pie.png')
kernel = np.ones((30, 30), np.uint8)
dilate_1 = cv2.dilate(pie, kernel, iterations=1)
dilate_2 = cv2.dilate(pie, kernel, iterations=2)
dilate_3 = cv2.dilate(pie, kernel, iterations=3)
res = np.hstack((dilate_1, dilate_2, dilate_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
膨胀圆3次的结果展示,图7:
二、 开运算与闭运算
2.1 开运算
# 开:先腐蚀,再膨胀
img = cv2.imread('DataPreprocessing/img/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.destroyAllWindows()
将原图1,先腐蚀,再膨胀,得到开运算结果图8:
2.2 闭运算
# 闭:先膨胀,再腐蚀
img = cv2.imread('DataPreprocessing/img/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.destroyAllWindows()
将原图1,先膨胀,再腐蚀,得到开运算结果图9:
三、梯度运算
拿原图3的圆,做5次膨胀,5次腐蚀,相减得到其轮廓。
# 梯度=膨胀-腐蚀
pie = cv2.imread('DataPreprocessing/img/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.destroyAllWindows()
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
得到梯度运算结果图10:
四、礼帽与黑帽
4.1 礼帽
礼帽 = 原始输入-开运算结果
# 礼帽
img = cv2.imread('DataPreprocessing/img/dige.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
得到礼帽结果图11:
4.2 黑帽
黑帽 = 闭运算-原始输入
# 黑帽
img = cv2.imread('DataPreprocessing/img/dige.png')
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()
得到礼帽结果图12:
来源:https://blog.csdn.net/qq_37700257/article/details/127039846
标签:Python,OpenCV,形态学,操作
0
投稿
猜你喜欢
TensorFlow可视化工具TensorBoard默认图与自定义图
2023-03-03 06:53:22
keras中epoch,batch,loss,val_loss用法说明
2021-08-11 10:56:30
详解Django+Uwsgi+Nginx的生产环境部署
2022-10-30 10:54:17
详解laravel安装使用Passport(Api认证)
2023-11-19 02:08:54
Python3将jpg转为pdf文件的方法示例
2021-06-25 11:31:17
Golang使用Gin框架实现http分块传输
2024-02-08 20:15:18
MySQL root密码的重置方法
2024-01-18 14:39:42
MySQL DDL 引发的同步延迟该如何解决
2024-01-26 19:44:00
python opencv实现图像矫正功能
2022-05-22 17:00:13
如何判断用户是否非正常离开聊天室?
2010-01-18 20:30:00
node.js实现BigPipe详解
2024-05-05 09:22:17
Python 识别12306图片验证码物品的实现示例
2021-04-03 22:17:24
Python个人博客程序开发实例用户验证功能
2023-07-31 14:24:36
探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句
2024-01-16 19:07:50
一文教你学会定位线上MySQL锁超时问题
2024-01-22 13:19:45
bootstrap实现二级下拉菜单效果
2024-04-17 10:40:42
Python数据分析之 Matplotlib 饼图绘制
2021-03-31 03:45:10
Python内建类型list源码学习
2023-03-21 09:41:24
Python实现控制手机电脑拍照并自动发送邮箱
2022-10-08 01:52:33
在docker上安装运行mysql实例
2024-01-19 10:44:26