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

相关推荐
xiaohouzi1122334 小时前
OpenCV的cv2.VideoCapture如何加GStreamer后端
人工智能·opencv·计算机视觉
用户8356290780514 小时前
从手动编辑到代码生成:Python 助你高效创建 Word 文档
后端·python
侃侃_天下4 小时前
最终的信号类
开发语言·c++·算法
c8i4 小时前
python中类的基本结构、特殊属性于MRO理解
python
echoarts5 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
liwulin05065 小时前
【ESP32-CAM】HELLO WORLD
python
荼蘼5 小时前
答题卡识别改分项目
人工智能·opencv·计算机视觉
Aomnitrix5 小时前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
Doris_20235 小时前
Python条件判断语句 if、elif 、else
前端·后端·python
Doris_20235 小时前
Python 模式匹配match case
前端·后端·python