OpenCV-Python图像形态变换概述及morphologyEx函数介绍

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython

一、形态变换概念

图像形态变换又称为形态学图像处理、图像形态学,它是基于数学形态学(Mathematical Morphology)基础之上建立的图像处理技术。数学形态学是一种图像处理方法和理论,是计算机数字图像处理的一个重要研究领域,它建立在严格数学理论基础上的一门学科,并已应用在多门学科的数字图像分析和处理的过程中,基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构。广泛应用于计算机文字识别、 计算机显微图像分析(如定量金相分析, 颗粒分析)、医学图像处理(例如细胞检测、心脏的运动过程研究、 脊椎骨癌图像自动数量描述)、图像编码压缩、工业检测(如食品检验和印刷电路自动检测)、材料科学、机器人视觉、汽车运动情况监测、指纹检测、经济地理、合成音乐和断层X光照像等领域。

数学形态学是由一组形态学的代数运算子组成的,它的基本运算有4个: 膨胀(或扩张)、腐蚀(或侵蚀)、开运算和闭运算, 它们在二值图像和灰度图像中各有特点。基于这些基本运算还可推导和组合成各种数学形态学实用算法,用它们可以进行图像形状和结构的分析及处理,包括图像分割、特征抽取、边界检测、 图像滤波、图像增强和恢复等。数学形态学方法利用一个称作结构元素的“探针”收集图像的信息,当探针在图像中不断移动时, 便可考察图像各个部分之间的相互关系,从而了解图像的结构特征。数学形态学基于探测思想与人的FOA(Focus Of Attention)的视觉特点有类似之处。作为探针的结构元素,可直接携带知识(形态、大小、甚至加入灰度和色度信息)来探测、研究图像的结构特点。

除了4个基本形态变换运算,其他常用的形态变换还包括顶帽、黑帽、梯度图等。

更多形态变换的介绍请参考《百度文库:数学形态学及其应用》。

二、OpenCV的形态变换支持

在OpenCV为形态变换提供了单独的函数,这个函数就是morphologyEx。

2.1、调用语法

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

2.2、参数说明

在《OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍》等系列博文中老猿详细介绍了腐蚀和膨胀的原理、算法、Python的模拟实现以及OpenCV函数的详细语法及应用,morphologyEx函数的参数只比腐蚀erode函数和膨胀dilate函数多了一个参数op,其他参数名及含义完全一样,在此不重复介绍。

  • op:为形态变换的类型,包括如下取值类型:
  • MORPH_ERODE:腐蚀,当调用morphologyEx使用MORPH_ERODE类型时,与调用腐蚀函数erode效果相同
  • MORPH_DILATE:膨胀,当调用morphologyEx使用MORPH_DILATE类型时,与调用膨胀函数dilate效果相同
  • MORPH_OPEN:开运算,对图像先进行腐蚀再膨胀,等同于dilate(erode(src,kernal)),开运算对图像的边界进行平滑、去掉凸起等
  • MORPH_CLOSE:闭运算,对图像先进行膨胀在腐蚀,等同于erode(dilate(src,kernal)),闭运算用于填充图像内部的小空洞、填充图像的凹陷等
  • MORPH_GRADIENT:梯度图,用膨胀图减腐蚀图,等同于dilate(src,kernal)−erode(src,kernal),可以用于获得图像中物体的轮廓
  • MORPH_TOPHAT:顶帽,又称礼帽,用原图像减去开运算后的图像,等同于src−open(src,kernal),可以用于获得原图像中比周围亮的区域
  • MORPH_BLACKHAT:黑帽,闭运算图像减去原图像,等同于close(src,kernal)−src,可以用于获取原图像中比周围暗的区域
  • MORPH_HITMISS:击中击不中变换,用于匹配处理图像中是否存在核对应的图像,匹配时,需要确保核矩阵非0部分和为0部分都能匹配,注意该变换只能处理灰度图像。

上面简单介绍了各种形态学操作的概念,将在后续博文中就每种变换进行详细介绍。

三、形态变换博文传送门

下面是老猿博文中与形态变换相关的博文列表:

  1. https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
  2. https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
  3. https://blog.csdn.net/LaoYuanPython/article/details/109556425 OpenCV-Python图像形态变换概述及morphologyEx函数介绍
  4. https://blog.csdn.net/LaoYuanPython/article/details/109768675 OpenCV-Python图像运算变换处理:形态学梯度运算及分类
  5. https://blog.csdn.net/LaoYuanPython/article/details/110195287 OpenCV-Python中预览超大图的程序实现方法
  6. https://blog.csdn.net/LaoYuanPython/article/details/110223709 OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点
  7. https://blog.csdn.net/LaoYuanPython/article/details/110294445 OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
  8. https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址https://blog.csdn.net/laoyuanpython/category_9979286.html

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用 》(https://blog.csdn.net/laoyuanpython/category_9607725.html)专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》 (https://blog.csdn.net/laoyuanpython/category_10232926.html)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、《使用PyQt开发图形界面Python应用专栏目录 》(https://blog.csdn.net/LaoYuanPython/article/details/107580932)。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》(https://blog.csdn.net/laoyuanpython/category_9831699.html)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
上述代码的主要原理是对视频画面帧进行图像处理和分析,从而检测是否存在花屏问题。下面是代码的详细解释: 1. 首先,我们使用cv2.VideoCapture函数读取视频文件,并通过while循环逐帧读取视频。 ```python cap = cv2.VideoCapture('video.mp4') while True: # 逐帧读取视频 ret, frame = cap.read() if not ret: break ``` 2. 对于每一帧,我们首先对图像进行高斯模糊,使用cv2.GaussianBlur函数实现。这样可以使得图像中的噪点和细节被平滑掉,从而更容易进行后续处理。 ```python blurred = cv2.GaussianBlur(frame, (5, 5), 0) ``` 3. 然后,我们将图像转换为灰度图像,使用cv2.cvtColor函数实现。这样可以将图像中的各个通道的像素值合并为一个通道,从而简化后续处理。 ```python gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY) ``` 4. 接着,我们对灰度图像进行二值化处理,使用cv2.threshold函数实现。这样可以将图像中的像素值转换为黑白两种颜色,方便后续进行形态学处理。 ```python thresh = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY)[1] ``` 5. 然后,我们对二值化图像进行形态学操作,使用cv2.getStructuringElement和cv2.morphologyEx函数实现。这样可以去除图像中的小噪点和不连续的区域,从而只保留连通区域。 ```python kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) ``` 6. 最后,我们使用cv2.findContours函数检测图像中的连通区域,并判断连通区域数量是否大于1,从而检测是否存在花屏问题。 ```python contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if len(contours) > 1: print('Frame contains noise!') ``` 综上所述,上述代码通过对视频画面帧进行图像处理和分析,从而检测视频画面帧中是否存在花屏问题。需要注意的是,上述代码只是一个简单的示例,实际应用中可能需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值