python opencv 图像处理(九)

简介: python opencv 图像处理(九)

图像腐蚀与图像膨胀


图像的腐蚀( Erosion )和膨胀( Dilation )是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。


又出来新名词了:形态学。


简单来讲,图像形态学就是改变图像的形状,举例对于文字数字图像,将文字数字的线条变细或变粗。


图像形态学一些基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等等。

d2691dcbe3e8c342db77632e100ccc12.png

其中图像的膨胀和腐蚀是最基础的图像形态学操作,他们主要的功能如下:


消除噪声

分割( isolate )出独立的图像元素,在图像中连接( join )相邻的元素。

寻找图像中的明显的极大值区域或极小值区域

求出图像的梯度

在接着往下看之前,有一点需要注意的是,图像的腐蚀与膨胀,主要针对的是二值图像(黑白图)的,其中进行变化的部分是图像的白色部分(高亮)部分,不是黑色部分。


图像膨胀就是图像中的高亮部分进行膨胀,「领域扩张」,效果图拥有比原图更大的高亮区域。


图像腐蚀就是原图中的高亮部分被腐蚀,「领域被蚕食」,效果图拥有比原图更小的高亮区域。


图像腐蚀


图像腐蚀其中有两个比较关键的输入对象,一个是二值图像,另一个是卷积核。

腐蚀:是一种消除边界点,使边界向内部收缩的过程


  • 通俗讲法:在原图的每一个小区域里取最小值,由于是二值化图像,只要有一个点为0,则这个小区域的所有像素点都为0,来达到瘦身的目的

算法:用 3x3 的kernel,扫描图像的每一个像素;用 kernel 与其覆盖的二值图像做 “与” 操作;若都为1,则图像的该像素为1;否则为0.最终结果:使二值图像减小一圈。(也就是做卷积乘法,取图像尺寸与卷积核一样大小区域与卷积核一一像素值相乘,与卷积不同的是,卷积计算像素一一相乘后要累计求和,这里是需要判断是否存在相乘值为0的)

OpenCV 为图像腐蚀提供的函数是:erode() ,它的原函数如下:


def erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)


src:原图像。

kernel:卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

iterations:迭代次数,默认是迭代一次,表示进行一次腐蚀,如有需要,可进行多次迭代腐蚀。

这里通常设置卷积核所有值为1,只要是原始二值图像中像素值不为0,保留原始像素并做腐蚀处理。


import cv2 as cv
import numpy as np
def erode():
 # 图像读取
    src = cv.imread('data.jpg')
     # BGR 图像转灰度
    gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    # 二值图像处理
    r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO_INV)
    # 设置卷积核
    kernel = np.ones((3, 3),np.uint8)
    # 进行图像腐蚀,默认迭代 1 次
    dst1 = cv.erode(b, kernel)
    # 图像显示
    cv.imshow("source", src)
    cv.imshow("b",b)
    cv.imshow("dst1", dst1)
    # 等待操作
    cv.waitKey(0)
    cv.destroyAllWindows()


bd43f797e8aeff3d5847d8cef11e9648.png


备注:卷积核的大小与迭代次数都会影响图像腐蚀的效果,通常卷积核越大,腐蚀效果越高,迭代次数越多,腐蚀效果越高,反之效果越小。


图像膨胀


图像膨胀正好和图像腐蚀相反,卷积核的中心点逐个扫描原始图像中的每一个像素点,被扫描到的原始图像中的像素点,只要有一个值为 1 时则为 1 ,否则为 0 。

OpenCV 为图像腐蚀提供的函数是:dilate() ,它的原函数如下:


def dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)


  • src:原图像。
  • kernel:卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
  • iterations:迭代次数,默认是迭代一次,表示进行一次膨胀,如有需要,可进行多次迭代腐蚀。

示例代码如下:


import cv2 as cv
import numpy as np
def dilate():
 # 图像读取
    src = cv.imread('data.jpg')
     # BGR 图像转灰度
    gray_img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    # 二值图像处理
    r, b = cv.threshold(gray_img, 127, 255, cv.THRESH_TOZERO_INV)
    # 设置卷积核
    kernel1 = np.ones((8, 8),np.uint8)
    # 进行图像腐蚀,默认迭代 1 次
    dst1 = cv.dilate(b, kernel1)
    # 图像显示
    cv.imshow("source", src)
    cv.imshow("b", b)
    cv.imshow("dst1", dst1)
    # 等待操作
    cv.waitKey(0)
    cv.destroyAllWindows()


1c9fed77037e716a515a869992282836.png

相关文章
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
600 7
基于qt的opencv实时图像处理框架FastCvLearn实战
|
10月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
416 20
|
6月前
|
人工智能 算法 计算机视觉
Python 图像处理技巧
本文介绍了Python图像处理中需要掌握的15个基本技能,涵盖图像读取与保存、颜色空间转换、裁剪与调整大小、滤波与平滑、边缘检测、阈值处理、形态学操作、直方图处理、特征检测与描述、图像配准与特征匹配、轮廓检测与分析、图像分割、模板匹配、透视变换与仿射变换以及傅里叶变换等内容。通过OpenCV、Pillow和Matplotlib等库实现相关功能,为图像处理提供了全面的基础指导。
209 0
|
9月前
|
监控 Java 计算机视觉
Python图像处理中的内存泄漏问题:原因、检测与解决方案
在Python图像处理中,内存泄漏是常见问题,尤其在处理大图像时。本文探讨了内存泄漏的原因(如大图像数据、循环引用、外部库使用等),并介绍了检测工具(如memory_profiler、objgraph、tracemalloc)和解决方法(如显式释放资源、避免循环引用、选择良好内存管理的库)。通过具体代码示例,帮助开发者有效应对内存泄漏挑战。
474 1
|
10月前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
478 10
|
10月前
|
机器学习/深度学习 算法 数据可视化
Python的计算机视觉与图像处理
本文介绍了Python在计算机视觉和图像处理领域的应用,涵盖核心概念、算法原理、最佳实践及应用场景。重点讲解了OpenCV、NumPy、Pillow和Matplotlib等工具的使用,并通过代码实例展示了图像读写、处理和可视化的方法。实际应用包括自动驾驶、人脸识别、物体检测等。未来趋势涉及深度学习、边缘计算和量子计算,同时也讨论了数据不足、模型解释性和计算资源等挑战。
529 2
|
计算机视觉 开发者 Python
利用Python进行简单的图像处理
【10月更文挑战第36天】本文将引导读者理解如何使用Python编程语言和其强大的库,如PIL和OpenCV,进行图像处理。我们将从基本的图像操作开始,然后逐步深入到更复杂的技术,如滤波器和边缘检测。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供新的视角和技能,让你能够更好地理解和操作图像数据。
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
390 7
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
809 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
机器学习/深度学习 计算机视觉 Python
opencv环境搭建-python
本文介绍了如何在Python环境中安装OpenCV库及其相关扩展库,包括numpy和matplotlib,并提供了基础的图像读取和显示代码示例,同时强调了使用Python虚拟环境的重要性和基本操作。

推荐镜像

更多