python学opencv|读取图像(五十九)使用cv2.dilate()函数实现图像膨胀处理

【1】引言

前序学习过程中,已经初步了解了腐蚀带来的图像处理效果,相关文章链接为:

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

腐蚀其实在一定程度上削减了部分像素,在此基础上,可以进一步探究膨胀对图像的处理效果。

膨胀本身应该是对图像进行放大,需要使用的函数为cv2.dilate()函数。

【2】官网教程

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

OpenCV: Image Filtering

官网对cv2.dilate()函数的说明为:

++图1 官网对cv2.dilate()函数的说明++

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

void cv::dilate (

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)
dstpz1 = cv.dilate(srcm, k) #图像膨胀运算,膨胀核大小为(3,3)
dstpz2 = cv.dilate(srcm, k1) #图像膨胀运算,膨胀核大小为(5,5)
dstpz3 = cv.dilate(srcm, k2) #图像膨胀运算,膨胀核大小为(7,7)

然后显示和保存图像:

python 复制代码
# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dst ', dstpz1)
cv.imwrite('dstpz1.png', dstpz1)
cv.imshow('dstpz2 ', dstpz2)
cv.imwrite('dstpz2.png', dstpz2)
cv.imshow('dstpz3 ', dstpz3)
cv.imwrite('dstpz3.png', dstpz3)

# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

代码运行相关的图像为:

++图2 初始图像srcg.png++

++图3 膨胀图像dstpz1.png++

++图4 膨胀图像dstpz2.png++

++图5 膨胀图像dstpz3.png++

由图2到图5可知,调用cv2.dilate()函数进行图像膨胀处理后,膨胀核越大,图像往外膨胀的趋势越明显,图像越模糊。

此时的完整代码为:

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)
dstpz1 = cv.dilate(srcm, k) #图像膨胀运算,膨胀核大小为(3,3)
dstpz2 = cv.dilate(srcm, k1) #图像膨胀运算,膨胀核大小为(3,3)
dstpz3 = cv.dilate(srcm, k2) #图像膨胀运算,膨胀核大小为(3,3)
# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dstpz1', dstpz1)
cv.imwrite('dstpz1.png', dstpz1)
cv.imshow('dstpz2 ', dstpz2)
cv.imwrite('dstpz2.png', dstpz2)
cv.imshow('dstpz3 ', dstpz3)
cv.imwrite('dstpz3.png', dstpz3)

# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

【4】细节说明

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

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

【5】总结

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

相关推荐
程序猿20237 分钟前
大语言模型简介
人工智能·语言模型·自然语言处理
CodeLinghu12 分钟前
提示词链模式:一种利用LLM大语言模型处理复杂任务的强大范式
前端·人工智能·语言模型
Wilber的技术分享15 分钟前
【大模型实战笔记 8】深入理解 LangGraph:构建可持久化、多智能体的 LLM 工作流
人工智能·笔记·agent·langgraph·智能体开发
小二·19 分钟前
AI工程化实战《二》:RAG 高级优化全解——从 HyDE 到 Self-RAG,打造高精度企业问答系统
人工智能·microsoft·机器学习
yuhaiqun198921 分钟前
学AI Agent:从React模式到Plan框架,3条路径一次学透
人工智能·经验分享·笔记·react.js·机器学习·ai·aigc
zhonghua88101630 分钟前
spring ai alibab agent之ReactAgent深度解读
java·人工智能·spring
大模型教程.33 分钟前
收藏级教程:ReAct模式详解,让大模型从回答问题到解决问题
前端·人工智能·机器学习·前端框架·大模型·产品经理·react
飞凌嵌入式34 分钟前
AIoT出海背景下,嵌入式主控的国际认证之路与价值思考
大数据·人工智能·嵌入式硬件·区块链·嵌入式
Robot侠41 分钟前
多模态大语言模型(Multimodal LLM)技术实践指南
人工智能·语言模型·自然语言处理·transformer·rag·多模态大模型
roman_日积跬步-终至千里1 小时前
【计算机视觉概述】:从像素到理解的完整图景
人工智能·计算机视觉