python学opencv|读取图像(五十八)使用cv2.erode()函数实现图像腐蚀处理

news/2025/2/9 0:01:28/

【1】引言

前序学习过程中,已经掌握了对图像的阈值处理、按位叠加、滤波操作等技巧,相关文章链接包括且不限于:

pythonopencv|读取图像(五十)使用addWeighted()函数实现图像加权叠加效果-CSDN博客

pythonopencv|读取图像(四十五)增加掩模:使用cv2.bitwise_and()函数实现图像按位与运算-CSDN博客

 pythonopencv|读取图像(三十八 )阈值自适应处理_python opencv 自适应-CSDN博客

这些处理本质上都是在对图像的BGR值进行调整,不会造成图像基本轮廓的改变。

在此基础上,可以开始探索对图像有一些改变的处理方法,这就是本次文章的学习目标:腐蚀。

图像腐蚀调用的函数为cv2.erode()。

【2】官网教程

点击下方链接,直达cv2.erode()函数的官网教程:

OpenCV: Image Filtering

官网对cv2.erode()函数的解释为:

图1 官网对cv2.erode()函数的解释

相应的,官网中cv2.erode()函数的参数为:

void cv::erode     (    

        InputArray     src,           #输入图像
        OutputArray     dst,        #输出图像
        InputArray     kernel,     #腐蚀核
        Point     anchor = Point(-1,-1),   #腐蚀核锚点,可选参数
        int     iterations = 1,                    #腐蚀迭代次数,可选参数
        int     borderType = BORDER_CONSTANT,  #边界样式,可选参数
        const Scalar &     borderValue = morphologyDefaultBorderValue() )#边界值,可选参数

【3】代码测试

由于要自创腐蚀核,所以在代码编写的开始,需要引入cv2和numpy两个模块:

python">import cv2 as cv  # 引入CV模块
import numpy as np #引入numpy模块

之后先定义腐蚀核:

python">#定义腐蚀核
k=np.ones((3,3),np.uint8) #定义腐蚀核
k1=np.ones((5,5),np.uint8) #定义腐蚀核
k2=np.ones((7,7),np.uint8) #定义腐蚀核

然后引入图像,开始腐蚀计算:

python"># 读取图片
srcm = cv.imread('srcg.png')  # 读取图像srcx.png#腐蚀计算
dst = cv.erode(srcm,k)  # 图像取平均值,像素核大小为(3,3)
dst1 = cv.erode(srcm,k1)  # 图像取平均值,像素核大小为(5,5)
dst2 = cv.erode(srcm,k1)  # 图像取平均值,像素核大小为(7,7)

然后显示和保存图像:

python"># 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dst ', dst)
cv.imwrite('dst.png',dst)
cv.imshow('dst1 ', dst1)
cv.imwrite('dst1.png',dst1)
cv.imshow('dst2 ', dst2)
cv.imwrite('dst2.png',dst2)# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

代码运行相关的图像为:

图2 初始图像srcg.png

图3 腐蚀图像dst.png

图4 腐蚀图像dst1.png

图5 腐蚀图像dst2.png

由图2到图5可知,调用cv2.erode()函数进行图像腐蚀处理后,腐蚀核越大,腐蚀效果越好,图像越模糊。

此时的完整代码为:

python">import cv2 as cv  # 引入CV模块
import numpy as np #引入numpy模块#定义腐蚀核
k=np.ones((3,3),np.uint8) #定义腐蚀核
k1=np.ones((5,5),np.uint8) #定义腐蚀核
k2=np.ones((7,7),np.uint8) #定义腐蚀核# 读取图片
srcm = cv.imread('srcg.png')  # 读取图像srcx.png#腐蚀计算
dst = cv.erode(srcm,k)  # 图像取平均值,像素核大小为(3,3)
dst1 = cv.erode(srcm,k1)  # 图像取平均值,像素核大小为(3,3)
dst2 = cv.erode(srcm,k1)  # 图像取平均值,像素核大小为(3,3)
# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dst ', dst)
cv.imwrite('dst.png',dst)
cv.imshow('dst1 ', dst1)
cv.imwrite('dst1.png',dst1)
cv.imshow('dst2 ', dst2)
cv.imwrite('dst2.png',dst2)# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

【4】细节说明

腐蚀运算需要提前定义腐蚀核,腐蚀核矩阵应该是奇数nXn,并且腐蚀核不应该是纯0矩阵。

经测试,纯0矩阵的腐蚀核,没有明显的腐蚀效果。

【5】总结

掌握了使用python+opencv实现调用cv2.erode()函数进行图像腐蚀处理的技巧。


http://www.ppmy.cn/news/1570451.html

相关文章

【戒抖音系列】短视频戒除-1-对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面,尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨,慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…

maven如何分析指定jar包的依赖路径

在Maven项目中,分析指定JAR包的依赖路径是非常有用的,尤其是在解决依赖冲突时。Maven提供了一个命令行工具来帮助查看特定依赖的传递性依赖(即依赖路径)。以下是具体步骤: 使用 mvn dependency:tree 命令 打开命令行或…

unity学习29:摄像机camera相关skybox 和 Render Texture测试效果

目录 1 摄像机 1.1 每个Scene里都自带一个摄像机 camera 1.2 可以创建多个camera 1.3 下面先看backgroundtype: 2 backgroundtype: 天空盒 skybox 2.1 清除标志,清除:天空盒 自选天空盒 2.2 window /Asset Store 2.3 导入skybox 3 backgroundtype: 纯色…

pycharm集成通义灵码应用

在pycharm中安装通义灵码 1、打开files-settings 2、选中plugins-搜索”TONGYI Lingma“,点击安装 3.安装完成后在pycharm的右侧就有通义灵码的标签 4、登录账号 5、查看代码区域代码,每一个方法前面都多了通义灵码的标识,可以直接选择…

Spring Boot篇

为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…

Vue.js组件开发-实现底部浮动导航页面滚动预览

使用 Vue 实现底部浮动导航,并且在页面滚动时进行预览 步骤概述 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。设计页面结构:创建包含内容区域和底部浮动导航栏的页面结构。实现滚动监听:监听页面滚动事件,根…

七、深入学习TensorRT,Quantized

Working with Quantized Types(一) Quantization WorkflowsPost-training quantization (PTQ)Quantization-aware training (QAT)Quantization Modes 距离上一篇文章已经过去快一年了,这一年也真够忙的,也够累的,躺平吧又躺不平,赚…

C++----继承

一、继承的基本概念 本质:代码复用类关系建模(是多态的基础) class Person { /*...*/ }; class Student : public Person { /*...*/ }; // public继承 派生类继承基类成员(数据方法),可以通过监视窗口检…