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

【1】引言

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

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

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

python学opencv|读取图像(三十八 )阈值自适应处理_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()函数进行图像腐蚀处理的技巧。

相关推荐
魔尔助理顾问16 分钟前
Flask如何读取配置信息
python·flask·bootstrap
chxii44 分钟前
5java集合框架
java·开发语言
老衲有点帅1 小时前
C#多线程Thread
开发语言·c#
C++ 老炮儿的技术栈1 小时前
什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
c语言·开发语言·c++·qt·算法
jc_hook1 小时前
Python 接入DeepSeek
python·大模型·deepseek
IsPrisoner1 小时前
Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
开发语言·后端·golang
Python私教1 小时前
征服Rust:从零到独立开发的实战进阶
服务器·开发语言·rust
chicpopoo1 小时前
Python打卡DAY25
开发语言·python
crazyme_62 小时前
深入掌握 Python 切片操作:解锁数据处理的高效密码
开发语言·python