iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >OpenCV-Python怎么实现通用形态学函数
  • 403
分享到

OpenCV-Python怎么实现通用形态学函数

2023-06-15 12:06:11 403人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章将为大家详细讲解有关OpenCV-python怎么实现通用形态学函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通用形态学函数,我们介绍了形态学的基础腐蚀与膨胀操作,而将腐蚀与膨胀结合起来进行组

这篇文章将为大家详细讲解有关OpenCV-python怎么实现通用形态学函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

通用形态学函数

,我们介绍了形态学的基础腐蚀与膨胀操作,而将腐蚀与膨胀结合起来进行组合,我们就能实现开运算,闭运算等复杂的形态学运算。

在OpenCV中,它给我们提供的通用形态学函数为cv2.morphologyEx(),其完整定义如下:

def morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):

这些参数基本前面都介绍过,不过有一点需要说明,src原始图像必须是CV_8U,CV_16U,CV_16S,CV_32F,CV_64F中的一种。

当然,这里面还有一个陌生的参数就是op,它就是各种形态学的类别,具体类别如表所示:

类型说明意义操作
cv2.MORPH_ERODE腐蚀腐蚀erode()
cv2.MORPH_DILATE膨胀膨胀dilate()
cv2.MORPH_OPEN开运算先腐蚀后膨胀dilate(erode())
cv2.MORPH_CLOSE闭运算先膨胀后腐蚀erode(dilate())
cv2.MORPH_GRADIENT形态学梯度运算膨胀图减腐蚀图dilate()-erode()
cv2.MORPH_TOPHAT顶帽运算原始图像减开运算所得图像src-open()
cv2.MORPH_BLACKHAT黑帽运算闭运算所得图像减原始图像close()-src
cv2.MORPH_HITMISS击中击不中前景背景腐蚀运算的交集。仅仅支持CV8UC1二进制图像intersection(erode(src),erode(src1))

开运算

如上表所示,开运算是将原图像腐蚀,再对其进行膨胀操作。主要用于去噪,计数等。去噪我们已经通过上面的腐蚀操作就可以完成,下面我们来实现有趣的计数操作。

import cv2import numpy as npimg = cv2.imread("open.jpg",cv2.IMREAD_UNCHANGED)kernel = np.ones((9,9), np.float32)result = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=5)cv2.imshow("img", img)cv2.imshow("result", result)cv2.waiTKEy()cv2.destroyAllwindows()

运行之后,我们能将不同区域划分开来,效果如下:

OpenCV-Python怎么实现通用形态学函数

闭运算

闭运算是先膨胀后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。下面,我们就将上图进行连接。

import cv2import numpy as npimg = cv2.imread("close.jpg", cv2.IMREAD_UNCHANGED)kernel = np.ones((10, 10), np.float32)result = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=7)cv2.imshow("img", img)cv2.imshow("result", result)cv2.waitKey()cv2.destroyAllWindows()

运行之后,两个方块就连接为一个整体了,效果如下所示:

OpenCV-Python怎么实现通用形态学函数

形态学梯度运算

形态学梯度运算是用图像膨胀后的图像减去腐蚀图像的运算,该操作可以获取原始图像中的前景图像的边缘。我们还是用上篇膨胀的图来测试,代码如下:

import cv2import numpy as npimg = cv2.imread("8.jpg", cv2.IMREAD_UNCHANGED)kernel = np.ones((5, 5), np.float32)result = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel,iterations=2)cv2.imshow("img", img)cv2.imshow("result", result)cv2.waitKey()cv2.destroyAllWindows()

运行之后,我们的图像就中空了,效果如下:

OpenCV-Python怎么实现通用形态学函数

顶帽运算

顶帽运算是用原始图像减去其开运算图像的操作。它能够获取图像的噪声信息,或者得到比原图像的边缘更亮的边缘信息。也就是获取上图中的白色线条,具体代码如下:

import cv2import numpy as npimg = cv2.imread("8.jpg", cv2.IMREAD_UNCHANGED)kernel = np.ones((5, 5), np.float32)result = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel,iterations=2)cv2.imshow("img", img)cv2.imshow("result", result)cv2.waitKey()cv2.destroyAllWindows()

运行之后,效果如下:

OpenCV-Python怎么实现通用形态学函数

黑帽运算

黑帽运算是用闭运算图像减去原始图像的操作。它能够获取内部的小孔,或前景色中的小黑点,亦或者得到比原始图像的边缘更暗的边缘部分。这里,我们用前面的人物图像,代码如下:

import cv2import numpy as npimg = cv2.imread("4.jpg", cv2.IMREAD_UNCHANGED)kernel = np.ones((5, 5), np.float32)result = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel,iterations=2)cv2.imshow("img", img)cv2.imshow("result", result)cv2.waitKey()cv2.destroyAllWindows()

运行之后,效果如下:

OpenCV-Python怎么实现通用形态学函数

结构元函数

前面我们介绍过,结构元可以自定义,也可以通过cv2.getStructuringElement()函数生成。这里,我们来看看其完整的定义:

def getStructuringElement(shape, ksize, anchor=None):

shape:形状类型,取值如下表:

类型意义
cv2.MORPH_RECT矩形结构元,所有元素值为1
cv2.MORPH_CROSS十字形结构元,对角线元素值为1
cv2.MORPH_ELLIPSE椭圆形结构元素

ksize:结构元的大小

anchor:结构元的锚点位置,默认值(-1,1),是形状的中心。只有十字星型的形状与锚点位置紧密联系。在其他情况下,锚点位置仅用于形态学运算结果的调整。

下面,我们将这三种形状类型都实现一遍,具体代码如下:

import cv2img = cv2.imread("open.jpg", cv2.IMREAD_UNCHANGED)kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT,(50,50))kernel2 = cv2.getStructuringElement(cv2.MORPH_CROSS,(50,50))kernel3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(50,50))result1 = cv2.dilate(img,kernel1)result2 = cv2.dilate(img,kernel2)result3 = cv2.dilate(img,kernel3)cv2.imshow("img", img)cv2.imshow("result1", result1)cv2.imshow("result2", result2)cv2.imshow("result3", result3)cv2.waitKey()cv2.destroyAllWindows()

运行之后,效果如下所示:

OpenCV-Python怎么实现通用形态学函数

关于“OpenCV-Python怎么实现通用形态学函数”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: OpenCV-Python怎么实现通用形态学函数

本文链接: https://www.lsjlt.com/news/280102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • OpenCV-Python怎么实现通用形态学函数
    这篇文章将为大家详细讲解有关OpenCV-Python怎么实现通用形态学函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通用形态学函数,我们介绍了形态学的基础腐蚀与膨胀操作,而将腐蚀与膨胀结合起来进行组...
    99+
    2023-06-15
  • OpenCV-Python实现通用形态学函数
    目录通用形态学函数开运算闭运算形态学梯度运算顶帽运算黑帽运算结构元函数通用形态学函数 上篇博文,我们介绍了形态学的基础腐蚀与膨胀操作,而将腐蚀与膨胀结合起来进行组合,我们就能实现开运...
    99+
    2024-04-02
  • OpenCV学习记录python实现连通域处理函数
    目录1、两个函数介绍1.1什么是连通域1.2 cv2.connectedComponents()1.3 cv2.connectedComponentsWithStats()2、代码实...
    99+
    2024-04-02
  • Python基本形态学滤波怎么实现
    最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算二值灰度binary_erosiongrey_erosion腐蚀binary_dilationgrey_dila...
    99+
    2023-05-22
    Python
  • 怎么用Python实现动态条形图
    这篇文章主要介绍“怎么用Python实现动态条形图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用Python实现动态条形图”文章能帮助大家解决问题。目前,官方的API文档只提供了一个条形图的源...
    99+
    2023-07-05
  • 怎么在python中通过函数形式实现一个生成器
    本篇文章给大家分享的是有关怎么在python中通过函数形式实现一个生成器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许...
    99+
    2023-06-14
  • 怎样通过函数实现C++多态性
    这期内容当中小编将会给大家带来有关怎样通过函数实现C++多态性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C++多态性主要体现在虚函数的调用,在C++中,虚函数的调用使用的是动态绑定,也有人说是晚捆绑,...
    99+
    2023-06-17
  • Python opencv怎么实现高动态范围成像
    这篇“Python opencv怎么实现高动态范围成像”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python openc...
    99+
    2023-07-02
  • OpenCV copyTo()函数怎么用
    这篇文章主要介绍“OpenCV copyTo()函数怎么用”,在日常操作中,相信很多人在OpenCV copyTo()函数怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”OpenCV&...
    99+
    2023-06-22
  • Python函数怎么实现学员管理系统
    本篇内容主要讲解“Python函数怎么实现学员管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python函数怎么实现学员管理系统”吧!本文实例为大家分享了Python函数实现学员管理系统...
    99+
    2023-06-20
  • Python中怎么通过@classmethod实现多态
    这篇文章主要介绍了Python中怎么通过@classmethod实现多态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中怎么通过@classmethod实现多态文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-04
  • 通过CSS数学函数实现动画特效
    目录前言CSS 数学函数绝对值中位数数轴上两点距离三角函数例子一维交错动画初始状态应用动画交错动画二维交错动画初始状态应用动画交错动画另一种动画余弦波动动画初始状态余弦排列波动动画交...
    99+
    2024-04-02
  • C++ OpenCV怎么实现形状识别功能
    本篇内容主要讲解“C++ OpenCV怎么实现形状识别功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ OpenCV怎么实现形状识别功能”吧!一、图像预处理原图如图所...
    99+
    2023-07-02
  • Python+eval函数实现动态地计算数学表达式详解
    目录Python 的 eval()第一个参数:expression第二个参数:globals第三个参数:locals用 eval() 计算表达式布尔表达式数学表达式通用表达式Pyth...
    99+
    2024-04-02
  • 详解四种Python中基本形态学滤波的实现
    目录二值形态学灰度形态学最基础的形态学操作有四个,分别是腐蚀、膨胀、开计算和闭计算,`scipy.ndimage分别实现了二值数组和灰度数组的这四种运算 二值灰度binary_ero...
    99+
    2023-05-15
    Python实现形态学滤波 Python形态学滤波 Python形态学
  • python opencv图像的高通滤波和低通滤波怎么实现
    这篇文章主要介绍“python opencv图像的高通滤波和低通滤波怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python opencv图像的高通滤波和低通滤波怎么实...
    99+
    2023-07-02
  • python如何实现函数多态性
    在python实现函数的多态性,具体方法如下:def remove_user(self,user_or_username):try:#If user_or_username is a User objectusername = user_o...
    99+
    2024-04-02
  • python中怎么通过函数名调用函数
    这篇文章主要介绍python中怎么通过函数名调用函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、通过eval实现 常用内置函数(不用import就可以直接使用) :help(obj) 在线帮助, ob...
    99+
    2023-06-15
  • 怎么在python中使用opencv绘制图形
    这篇文章给大家介绍怎么在python中使用opencv绘制图形,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现方法1)画线段 cv.line在图片中绘制一段直线# 绘制线段# 参数1:图片#&nb...
    99+
    2023-06-14
  • Python怎么实现调整数组形状
    这篇文章主要介绍了Python怎么实现调整数组形状的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现调整数组形状文章都会有所收获,下面我们一起来看看吧。更改维度数组中的数据在内存里是固定的,但计...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作