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()函数进行图像腐蚀处理的技巧。

相关推荐
小张学Python6 分钟前
AI数字人Heygem:口播与唇形同步的福音,无需docker,无需配置环境,一键整合包来了
python·数字人·heygem
跳跳糖炒酸奶10 分钟前
第四章、Isaacsim在GUI中构建机器人(2):组装一个简单的机器人
人工智能·python·算法·ubuntu·机器人
桃子酱紫君25 分钟前
华为配置篇-BGP实验
开发语言·华为·php
步木木37 分钟前
Anaconda和Pycharm的区别,以及如何选择两者
ide·python·pycharm
QTX1873038 分钟前
JavaScript 中的原型链与继承
开发语言·javascript·原型模式
星始流年38 分钟前
解决PyInstaller打包PySide6+QML应用的资源文件问题
python·llm·pyspider
南玖yy40 分钟前
Python网络爬虫:从入门到实践
爬虫·python
shaoing41 分钟前
MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
java·开发语言·数据库
The Future is mine1 小时前
Python计算经纬度两点之间距离
开发语言·python
Enti7c1 小时前
HTML5和CSS3的一些特性
开发语言·css3