当前位置: 首页 > news >正文

OpenCV四) —— 图像形态学处理(腐蚀操作 膨胀操作 开运算与闭运算 梯度运算 礼貌与黑帽)

图像形态学处理

腐蚀操作  cv2.erode()

用腐蚀操作就能够去掉这些毛刺

毛刺都没有了,线条变细了

#形态学-腐蚀操作
img = cv2.imread('dige.png')

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

kernel = np.ones((3,3),np.uint8) 
erosion = cv2.erode(img,kernel,iterations = 1)  #iterations是迭代次数

cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

iteration改成2、3就更细了

pie = cv2.imread('pie.png')

cv2.imshow('pie', pie)
cv2.waitKey(0)
cv2.destroyAllWindows()

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()

膨胀操作  cv2.dilate()

膨胀操作可以让变细的线条变粗,和腐蚀操作是互为逆操作的

腐蚀是在这种混合的情况下都变黑,而膨胀是在这种情况下都变白

#形态学-膨胀操作
img = cv2.imread('dige.png')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

kernel = np.ones((3,3),np.uint8) 
dige_erosion = cv2.erode(img,kernel,iterations = 1)

cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
kernel = np.ones((3,3),np.uint8) 
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)

cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

pie = cv2.imread('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()

开运算与闭运算  cv2.morphologyEx()  

开:先腐蚀再膨胀

闭:先膨胀再腐蚀

#开运算与闭运算
# 开:先腐蚀,再膨胀
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.destroyAllWindows()

# 闭:先膨胀,再腐蚀
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.destroyAllWindows()

梯度运算

梯度=膨胀-腐蚀

提取轮廓

#梯度运算
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.destroyAllWindows()

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)

cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

礼貌与黑帽

礼帽 = 原始输入-开运算结果

      提取出刺来

黑帽 = 闭运算-原始输入

    只留下一个大致轮廓

#礼帽与黑帽
#礼帽 = 原始输入-开运算结果
#黑帽 = 闭运算-原始输入

#礼帽
img = cv2.imread('dige.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

#黑帽
img = cv2.imread('dige.png')
blackhat  = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()

 

相关文章:

  • OpenCV(五) —— 图像梯度处理 边缘检测(Sobel算子 Scharr算子 laplacian算子 Canny算子)
  • OpenCV(六) —— 边缘检测(Canny)
  • OpenCV(七) —— 图像金字塔(拉普拉斯金字塔) 轮廓检测(轮廓特征 轮廓近似 轮廓绘制 边界矩形 外接圆 ) 傅里叶变换
  • OpenCV(八) —— 直方图(mask操作 (自适应)直方图均衡化) 模板匹配 图像特征(harri角点检测)
  • TPU 使用TPU训练tensorflow初探(Colab)
  • 搜索中的TSA(树搜索算法) GSA(图搜索算法) UCS(代价一致) CSP(约束满足问题)
  • 二分图(二分图判断之染色法 最大匹配 最佳匹配 匈牙利算法)
  • 位图索引Bitmap indexes(数据库索引)
  • YOLO算法(二)—— Yolov2 yolo9000
  • YOLO算法(三)—— Yolov3 Yolo系列网络优缺点
  • Python的__future__模块
  • 启发函数heuristic 与 A*
  • 什么是non-trivial
  • 深度学习之目标检测(六)—— Faster RCNN系列算法(RCNN SPNet Fast RCNN Faster RCNN)
  • Nest Loop Join嵌套循环连接
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [数据结构]链表的实现在PHP中
  • [译]CSS 居中(Center)方法大合集
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 0基础学习移动端适配
  • Babel配置的不完全指南
  • golang中接口赋值与方法集
  • Javascript弹出层-初探
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS变量作用域
  • js正则,这点儿就够用了
  • Promise面试题2实现异步串行执行
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • 记一次和乔布斯合作最难忘的经历
  • 每天10道Java面试题,跟我走,offer有!
  • 如何解决微信端直接跳WAP端
  • 如何胜任知名企业的商业数据分析师?
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一份游戏开发学习路线
  • 一些关于Rust在2019年的思考
  • 原生 js 实现移动端 Touch 滑动反弹
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (Java)【深基9.例1】选举学生会
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (分布式缓存)Redis持久化
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net分布式压力测试工具(Beetle.DT)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • ::before和::after 常见的用法
  • @GlobalLock注解作用与原理解析
  • @Import注解详解
  • [1127]图形打印 sdutOJ