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

OpenCV-Python实战(10)——形态学

1、腐蚀 cv2.erode()

可以删除图像中的噪音点。

可以删除毛边。

分割图像(当图像连接的不够紧密时) 。

img = cv2.erode(src=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)

img:目标图像。

src:原始图像。

kernel:腐蚀核大小。

anchor:锚点位置,默认是:(-1,-1),核的中心。

iterations:腐蚀操作迭代次数。

borderType、borderValue:边界样式,边界值,使用默认即可。

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-2):int(h/2+2),50:w-50]=0 # 在圆中间画一条线

img1 = cv2.erode(src=pie,kernel=(11,11),iterations=3)  # 腐蚀

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

2、膨胀 cv2.dilate()

图像沿着边缘向外扩展的操作。

img = cv2.dilate(src=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)  

img:目标图像。

src:原始图像。

kernel:腐蚀核大小。

anchor:锚点位置,默认是:(-1,-1),核的中心。

iterations:腐蚀操作迭代次数。

borderType、borderValue:边界样式,边界值,使用默认即可。

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-2):int(h/2+2),50:w-50]=0 # 在圆中间画一条线

img1 = cv2.dilate(src=pie,kernel=(11,11),iterations=4)

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

3、形态学通用函数 cv2.morphologyEx()

img = cv2.morphologyEx(src=*,op=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)

img:目标图像。

src:原始图像。

op:操作方式,常见操作方式如下表所示:

操作方式解释
MOREPH_ERODE腐蚀
MOREPH_DILATE膨胀
MOREPH_OPEN开运算
MOREPH_CLOSE闭运算
MOREPH_GRADIENT形态学梯度
MOREPH_TOPHAT礼貌运算
MOREPH_BLACKHAT黑帽运算

kernel:腐蚀核大小。

anchor:锚点位置,默认是:(-1,-1),核的中心。

iterations:腐蚀操作迭代次数。

borderType、borderValue:边界样式,边界值,使用默认即可。

4、开运算 cv2.morphologyEx()

先做腐蚀,在做膨胀操作。

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-1):int(h/2+1),50:w-50]=255 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_OPEN,kernel=(11,11),iterations=3)

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

5、闭运算  

先做膨胀操作,在做腐蚀操作。 

import cv2
import numpy as np

pie = cv2.imread('pie.png')  # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-1):int(h/2+1),50:w-50]=0 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_CLOSE,kernel=(11,11),iterations=3)

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

 6、形态学梯度

膨胀操作后的图像 - 腐蚀操作后的图像 = 图像边缘 

import cv2

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


img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_GRADIENT,kernel=(11,11),iterations=3)

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

 7、礼帽运算

原始图像 - 开运算图像 = 礼帽运算

可以得到原始图像的噪音点。

import cv2
import numpy as np

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

h,w = pie.shape[:2]
pie[int(h/2-1):int(h/2+1),:]=255 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_TOPHAT,kernel=(11,11))

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

 8、黑帽运算

 原始图像 - 闭运算图像 = 黑帽运算

import cv2
import numpy as np

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

h,w = pie.shape[:2]
pie[int(h/2-1):int(h/2+1),:]=255 # 在圆中间画一条线

img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_BLACKHAT,kernel=(11,11))

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

9、核函数

kernel = cv2.getStructuringElement(shape=*,ksize=,anchor=*)

kernel:核矩阵。

shape:内核形状,常见的参数如下:

参数解释
MORPH_RECT所有元素都是1
MORPH_ELLIPSE椭圆形位置为1
MORPH_CROSS十字形位置是1

ksize:内核大小。

anchor:内核锚点,默认为:(-1,-1),核中心位置。

import cv2

kernel1 = cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(5,5))
kernel2 = cv2.getStructuringElement(shape=cv2.MORPH_ELLIPSE,ksize=(5,5))
kernel3 = cv2.getStructuringElement(shape=cv2.MORPH_CROSS,ksize=(5,5))
print(kernel1)
print(kernel2)
print(kernel3)

cv2.waitKey(0)
cv2.destroyAllWindows()
[[1 1 1 1 1]    [[0 0 1 0 0]    [[0 0 1 0 0]
 [1 1 1 1 1]     [1 1 1 1 1]     [0 0 1 0 0]
 [1 1 1 1 1]     [1 1 1 1 1]     [1 1 1 1 1]
 [1 1 1 1 1]     [1 1 1 1 1]     [0 0 1 0 0]
 [1 1 1 1 1]]    [0 0 1 0 0]]    [0 0 1 0 0]]


http://www.kler.cn/a/458368.html

相关文章:

  • swagger,showdoc,apifox,Mock 服务,dubbo,ZooKeeper和dubbo的关系
  • C#:多线程 简单示例
  • 【嵌入式硬件】嵌入式显示屏接口
  • 谷粒商城项目125-spring整合high-level-client
  • Ubuntu 20.04.1 LTS搭建nginx + php7.4运行环境
  • 实际开发中,前端项目安装依赖问题总结
  • 设计模式之迭代器模式:图书馆漫步指南
  • 王佩丰24节Excel学习笔记——第二十一讲:经典Excel动态图表实现原理
  • 《Vue3 四》Vue 的组件化
  • SAP SD学习笔记21 - 请求传票的数据流(拷贝管理)
  • 关于Babylon.js的ArcRotateCamera操作范围控制方法参考
  • 代码随想录算法【Day5\Day6】
  • 国产化移动终端赋能能源的深远意义
  • 2、C#基于.net framework的应用开发实战编程 - 设计(二、四) - 编程手把手系列文章...
  • 如何设置Edge浏览器访问软件
  • Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)
  • 【学生管理系统】element ui级联菜单bug
  • 8款白嫖党必备的ai写作神器,你都知道吗- #AI写作#科技
  • 1.微服务灰度发布落地实践(方案设计)
  • 解决无法在 Ubuntu 24.04 上运行 AppImage 应用
  • Burp炮台实现(动态ip发包)
  • 【笔记】如何在ubuntu中设置静态ip地址
  • Learning Multi-Scale Photo Exposure Correction
  • Unity3D Huatuo:划时代的原生C#热更新技术详解
  • DinD docker 嵌套部署踩坑
  • Java 构建工具的演变与比较:Ant、Maven 和 Gradle 的发展历程