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

相关推荐
jdlxx_dongfangxing20 小时前
C++ STL 容器与算法详解
开发语言·c++·1024程序员节
明道源码20 小时前
Kotlin 控制流、函数、Lambda、高阶函数
android·开发语言·kotlin
橙子1991101620 小时前
在 Kotlin 中,ViewModel 的获取
开发语言·vue.js·kotlin
脚踏实地的大梦想家20 小时前
【Go】P8 Go 语言核心数据结构:深入解析切片 (Slice)
开发语言·数据结构·golang
hweiyu0020 小时前
Gradle 构建脚本迁移:从 Groovy DSL 到 Kotlin DSL,语法与技巧对比
开发语言·kotlin·gradle
程序员杰哥20 小时前
如何使用Postman做接口自动化测试及完美的可视化报告?
自动化测试·软件测试·python·测试工具·jenkins·postman·1024程序员节
Tony Bai20 小时前
【Go 网络编程全解】13 从 HTTP/1.1 到 gRPC:Web API 与微服务的演进
开发语言·网络·http·微服务·golang
峥嵘life21 小时前
Android EDLA开发认证说明和开发流程
开发语言·1024程序员节
老歌老听老掉牙21 小时前
参数曲线切向量与叉乘向量的精确计算与分析
python·sympy·1024程序员节
Antonio91521 小时前
【图像处理】灰度图像与二值化
图像处理·opencv